从 Classic ASP 转义 Javascript 变量中的引号

Escaping quotes in Javascript variable from Classic ASP

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

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

但显然显示为

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

当页面加载时,这会破坏具有意外标识符的函数。

编辑:我使用的是 jQuery 而不是 "how can I achieve this using jQuery" 抱歉不清楚。

有什么想法吗?谢谢

你问过如何做到这一点"Using jQuery."你不能。到涉及 jQuery 时,代码已经无效。您必须修复此 服务器端 .

Classic 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 标志的正则表达式,以便您替换所有出现的地方(如果您使用字符串作为第一个参数,它只会替换第一个匹配项)。

调整 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 
    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 
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, and it has the benefits explained in this other answer 的帮助下完成的。

请注意,我没有按照其他答案中的建议特别转义 "',因为我认为在 html“常规”上下文中(示例属性值), HTMLEncode 必须另外完成,它会处理引号(和符号,...)。
由于 <script> 上下文情况,< 仍然被特殊处理,其中 HTMLEncode 无法使用(从 Javascript 代码的角度来看,它不会被 html 解码,当在 <script> 标签内使用时)。有关 <script> 案例的更多信息,请参阅 here

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

我处理这些东西已经有一段时间了。 您必须对数据进行编码才能在属性中使用它。 试试这个。

<%=server.HTMLEncode(goal_a)%>