【问题标题】:Adding quotes to a string in VBScript在 VBScript 中为字符串添加引号
【发布时间】:2021-11-11 10:17:25
【问题描述】:

我有这个代码:

a = "xyz"  
g = "abcd " & a  

运行后g的值为abcd xyz

但是,我想在g 中为a 的值加上引号。运行代码后,g 应该是 abcd "xyz"

我怎样才能做到这一点?

【问题讨论】:

    标签: vbscript escaping string-concatenation


    【解决方案1】:

    双引号可以转义

    g="abcd """ & a & """"
    

    或者写一个明确的chr()调用

    g="abcd " & chr(34) & a & chr(34)
    

    【讨论】:

      【解决方案2】:

      你必须使用双双引号来转义双引号(lol):

      g = "abcd """ & a & """"
      

      【讨论】:

      • 用自身转义特殊字符并不罕见,请参阅 C 风格语言中的双反斜杠或 SQL 中的双单引号。
      • 非常有趣 :) 是的。这就是VBS的方式
      【解决方案3】:

      我通常这样做:

      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
      

      【讨论】:

        【解决方案4】:

        指定引号的传统方法是使用Chr(34)。这是抗错误的,不是可憎的。

        Chr(34) & "string" & Chr(34)
        

        【讨论】:

          【解决方案5】:

          你可以这样做:

          a="""xyz"""  
          g="abcd " & a  
          

          或者:

          a=chr(34) & "xyz" & chr(34)
          g="abcd " & a  
          

          【讨论】:

            【解决方案6】:

            我认为我无法改进这些答案,因为我已经全部使用了它们,但我更喜欢声明一个常量并使用它,因为如果你有一个长字符串并尝试适应它可能会很痛苦正确的报价数量并犯错误。 ;)

            【讨论】:

              【解决方案7】:

              我设计了一个简单的方法,在形成字符串时使用单引号,然后调用一个用双引号替换单引号的函数。

              当然,只要您不需要在字符串中包含实际的单引号,这种方法就可以工作。

              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
              

              ...

              希望这会有所帮助。

              【讨论】:

                【解决方案8】:

                我发现使用双引号和三引号的答案并不令人满意。我使用嵌套的 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"/>
                

                【讨论】:

                • chr(34) 有效。但是转义双引号也是如此。您的顶级示例代码不会输出您声称的内容;那里出了点问题。您的“工作”示例甚至包括转义,证明它确实有效。
                • 输出代码中的数字来自分配给变量的值。这段代码只是一个 sn-p。整个输出是一个 178 KB 的文件。双引号和三引号确实有效,但不是我需要的。我不知道为什么,但这并不能改变它在我的情况下不能正常工作的事实。我正在将输出写入文件。可能是嵌套循环内的多个转义使用一个解释代码编写另一个同时写入文件对于 VBscript 解释器来说太多了。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2020-12-07
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-03-08
                相关资源
                最近更新 更多