单引号?双引号? - 论VBScript中某些特殊字符串的构造
在开始前因为本人奇懒,所以先 Const VBS = "VBScript"
刚才看了一位朋友学习ASP后关于字符串赋值中单引号以及双引号的使用体会,不禁茫然,因为根本连我都越看越糊涂,莫非VBS中竟然有我从来未听闻过的东西?
忽然间,觉得很有必要跟大家讲讲这个问题,让大家明白其中原理.
其重点就是:双引号是VBS的字符串界定符,而单引号跟VBS根本任何关系都没有
下面就两种常见的情况来说一下
第一种情况:输出HTML语句
单引号只是HTML语言中的界定,当然在HTML语言中可以使用双引号界定属性,但因为在VBS中输出HTML,所以必须使用单引号,或双引号的转义符,否则VBS程序会将它看作是界定字符串,如下
a = "<font color="red"></font>"
这个是不能运行的,因为语法错误,我们按vbs的语法标准把它拆开来看
"<font color="这里界定了一个字符串,"></font>"这里又界定了一个
这时可以看出,实际类似于
a = 字符串red字符串
而red是运算符吗?不是。所以很显然这个表达式不合理,这时VBS就将它作为整个字符串来看待,而VBS中给语句赋值为字符串后程序是以第2个双引号出现的位置作为赋值语句的终结。所以,当在一句正确的赋值语句后又出现了字符串,结果报错“程序语句为结束”
而如果把其中HTML控件font的属性red的赋值界定符号改为'或chr(34)的话,则程序可以顺利地执行,如下
a = "<font color='red'></font>"
或
a = "<font color= & chr(34) & red & chr(34) &></font>"
同时,我们知道在C中,可以以\+某些特定字符构成某些程序语法中所使用的字符的转义符以使程序顺利执行,如\"、\'等,同样的,在VBS中也可以以""(两个双引号)构成"的转义符而使程序顺利执行,如下
a = "<font color= "" red ""></font>"
第二种情况:<FONT color=red>构造SQL语句</FONT>
在VBS中SQL语句的赋值也与上面所说的HTML语句构造同理.至于单引号,在SQL语句中则是因为在SQL语法中单引号为字符串界定符所以用它而已,如文本字段和数值字段的赋值:
1.id为数值字段,根据它查询记录
SQL = "select * from table where id=1"
2.uname为文本字段,根据它查询记录
SQL = "select * from table where uname='姓名'"
这个大家应该能写出来吧。这里的单引号就是SQL语法中界定"姓名"为一个字符串的作用
现在我们将它们的值用我们的变/常量输入
1.id为gid变量
SQL = "select * from table where id=" & gid & ""
因为后面跟了个空字符串,所以可以去掉它而成如下语句
SQL = "select * from table where id=" & gid
2.uname为变量username
SQL = "select * from table where uname='" & username & "'"
在这里,我们就把原来的值"姓名"部分用变量username代替,即是将字符串"select * from table where uname='"与变量username拼合,再连结上字符串"'",如果你要问为什么,请仔细看上面例子中uname值为"姓名"时的写法,再比对现在的写法,前提是你必须会在VBS中组合字符串(应该都会吧:))
如果你使用的SQL语法中是将其它符号作为字符界定符的话,那你就必须使用符合你所使用的SQL语法规则的界定符号
从上面举的例子看,单引号完全是作为HTML语句或SQL语句的一部分来赋值,与VBS却无任何关系,希望这帖会对某些犹在对单引号或双引号问题不解的朋友有所帮助,如果你能真正的深入体会了这些原理的话,对其他程序语言的同类问题相信也能很快解决(我在明白这些以后,我对javascript中字符串的赋值就再也没卡壳的现象了:))