【发布时间】:2021-11-11 10:17:25
【问题描述】:
我有这个代码:
a = "xyz"
g = "abcd " & a
运行后g的值为abcd xyz。
但是,我想在g 中为a 的值加上引号。运行代码后,g 应该是 abcd "xyz"。
我怎样才能做到这一点?
【问题讨论】:
标签: vbscript escaping string-concatenation
我有这个代码:
a = "xyz"
g = "abcd " & a
运行后g的值为abcd xyz。
但是,我想在g 中为a 的值加上引号。运行代码后,g 应该是 abcd "xyz"。
我怎样才能做到这一点?
【问题讨论】:
标签: vbscript escaping string-concatenation
双引号可以转义
g="abcd """ & a & """"
或者写一个明确的chr()调用
g="abcd " & chr(34) & a & chr(34)
【讨论】:
你必须使用双双引号来转义双引号(lol):
g = "abcd """ & a & """"
【讨论】:
我通常这样做:
Const Q = """"
Dim a, g
a = "xyz"
g = "abcd " & Q & a & Q
如果您需要在代码中更频繁地将字符串包裹在引号中,并且发现上述方法嘈杂或不可读,您也可以将其包裹在一个函数中:
a = "xyz"
g = "abcd " & Q(a)
Function Q(s)
Q = """" & s & """"
End Function
【讨论】:
指定引号的传统方法是使用Chr(34)。这是抗错误的,不是可憎的。
Chr(34) & "string" & Chr(34)
【讨论】:
你可以这样做:
a="""xyz"""
g="abcd " & a
或者:
a=chr(34) & "xyz" & chr(34)
g="abcd " & a
【讨论】:
我认为我无法改进这些答案,因为我已经全部使用了它们,但我更喜欢声明一个常量并使用它,因为如果你有一个长字符串并尝试适应它可能会很痛苦正确的报价数量并犯错误。 ;)
【讨论】:
我设计了一个简单的方法,在形成字符串时使用单引号,然后调用一个用双引号替换单引号的函数。
当然,只要您不需要在字符串中包含实际的单引号,这种方法就可以工作。
Function Q(s)
Q = Replace(s,"'","""")
End Function
...
user="myself"
code ="70234"
level ="C"
r="{'User':'" & user & "','Code':'" & code & "','Level':'" & level & "'}"
r = Q(r)
response.write r
...
希望这会有所帮助。
【讨论】:
我发现使用双引号和三引号的答案并不令人满意。我使用嵌套的 DO...LOOP 来编写 ASP 代码段。字符串中有重复的引号。当我运行代码时:
thestring = "<asp:RectangleHotSpot Bottom=""" & bottom & """ HotSpotMode=""PostBack"" Left="""& left & """ PostBackValue=""" &xx & "." & yy & """ Right=""" & right & """ Top=""" & top & """/>"
输出是:
'Changing the code to the explicit chr() call worked:
thestring = "<asp:RectangleHotSpot Bottom=""" & bottom & chr(34) & " HotSpotMode=""PostBack"" Left="""& left & chr(34) & " PostBackValue=""" &xx & "." & yy & chr(34) & " Right=""" & right & chr(34) & " Top=""" & top & chr(34) &"/>"
输出:
<asp:RectangleHotSpot Bottom="28" HotSpotMode="PostBack" Left="0" PostBackValue="0.0" Right="29" Top="0"/>
【讨论】: