【问题标题】:Escaping quotes in Javascript variable from Classic ASP从经典 ASP 中转义 Javascript 变量中的引号
【发布时间】:2016-12-04 01:29:10
【问题描述】:

如何在 javascript/jQuery 中使用经典 ASP 变量转义引号? ASP 变量取自数据库。我正在使用:

var goala = "<%=(goal_a)%>";

但显然它显示为

var goala = "<p>testing "quotation" marks</p>";

当页面加载时,使用意外标识符中断功能。

编辑:我使用的是 jQuery 而不是“我如何使用 jQuery 实现这一点”抱歉不清楚。

有什么想法吗?谢谢

【问题讨论】:

  • 您在服务器端使用什么语言? VBScript 还是 JScript?
  • “使用 jQuery。” 你不能。你必须修复它服务器端
  • 对不起,我只是指那个函数使用 jquery 的事实,而不是我想要使用 jQuery 的解决方案,我已经澄清了原始帖子。

标签: javascript jquery asp-classic escaping


【解决方案1】:

你已经问过如何做到这一点“使用 jQuery”。你不能。到涉及 jQuery 的时候,代码已经无效了。您必须修复此服务器端

在一般情况下,经典 ASP 不太可能内置任何可以帮助您解决此问题的内容。

请注意,您必须处理的不仅仅是" 字符。要成功地将文本输出到 JavaScript 字符串文字,您必须至少处理您使用的引号("')、换行符、任何其他控制字符等。

如果您使用 VBScript 作为您的服务器端语言,您可以使用Replace 替换您需要替换的字符:

var goala = "<%=Replace(goal_a, """", "\""")%>";

不过,您需要建立一个清单,列出您需要处理和完成的事情;例如

var goala = "<%=Replace(Replace(Replace(goal_a, """", "\"""), Chr(13), "\n"), Chr(10), "\r")%>";

...等等。

如果您的服务器端语言是 JScript,您可以以几乎相同的方式使用 replace

var goala = "<%=goal_a.replace(/"/g, "\\\").replace(/\r/g, "\\r").replace(/\n/g, "\n")%>";

...等等。请注意使用带有g 标志的正则表达式,以便替换所有出现(如果您使用字符串作为第一个参数,它只会替换第一个匹配项)。

【讨论】:

  • 谢谢,非常简洁。需要指出使用替换,将其用于所见即所得,可以很好地处理其他字符,换行等
【解决方案2】:

调整answer for another language 提供了更强大的解决方案:

Function JavascriptStringEncode(text)
    If IsEmpty(text) Or text = "" Or IsNull(text) Then
        JavascriptStringEncode = text
        Exit Function
    End If

    Dim i, c, encoded, charcode
    ' Adapted from https://stackoverflow.com/q/2920752/1178314
    encoded = ""
    For i = 1 To Len(text)
        c = Mid(text, i, 1)
        Select Case c
            Case "'"
                encoded = encoded & "\'"
            Case """"
                encoded = encoded & "\"""
            Case "\"
                encoded = encoded & "\\"
            Case vbFormFeed
                encoded = encoded & "\f"
            Case vbLf
                encoded = encoded & "\n"
            Case vbCr
                encoded = encoded & "\r"
            Case vbTab
                encoded = encoded & "\t"
            Case "<" ' This avoids breaking a <script> content, in case the string contains "<!--" or "<script" or "</script"
                encoded = encoded & "\x3C"
            Case Else
                charcode = AscW(c)
                If charcode < 32 Or charcode > 127 Then
                    encoded = encoded & GetJavascriptUnicodeEscapedChar(charcode)
                Else
                    encoded = encoded & c
                End If
        End Select
    Next 

    JavascriptStringEncode = encoded
End Function

' Taken from https://stackoverflow.com/a/2243164/1178314
Function GetJavascriptUnicodeEscapedChar(charcode)
    charcode = Hex(charcode)
    GetJavascriptUnicodeEscapedChar = "\u" & String(4 - Len(charcode), "0") & charcode
End Function

这也是在answer on how to get the javascript unicode escaping 的帮助下完成的,它具有other answer 中解释的好处。

请注意,我没有像其他答案中所建议的那样专门转义 "',因为我认为在 html“常规”上下文(例如属性值)中,必须另外完成 HTMLEncode无论如何,它会处理引号(和与号,...)。
&lt; 仍然是特殊处理由于 &lt;script&gt; 上下文情况,其中 HTMLEncode 不能使用(它不会当在&lt;script&gt; 标签内使用时,从 Javascript 代码的角度对 html 进行解码)。有关&lt;script&gt; 案例的更多信息,请参阅here

当然,更好的解决方案是避免将任何 Javascript 直接放在 HTML 中,而是将它们全部放在单独的 Javascript 文件中。数据应通过 html 标签上的data- 属性给出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 2014-11-25
    • 2011-02-10
    • 1970-01-01
    相关资源
    最近更新 更多