从经典ASP

时间:2016-07-29 10:50:24

标签: javascript jquery asp-classic escaping

如何使用javascript / jQuery中的Classic ASP变量转义引号?? ASP变量取自DB。我正在使用:

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

但很明显,它显示为

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

页面加载时,会使用意外标识符中断函数。

编辑:我使用jQuery而不是&#34;我怎样才能使用jQuery实现这一点&#34;抱歉不清楚。

有什么想法吗?感谢

2 个答案:

答案 0 :(得分:2)

你已经问过如何做到这一点&#34;使用jQuery。&#34;你不能。当涉及jQuery时,代码已经无效。您必须修复此服务器端

经典ASP不太可能有任何内置功能,可以帮助您在一般情况下解决这个问题。

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

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

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

但是,你需要建立一份你需要处理和解决的事情清单; e.g。

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

答案 1 :(得分:0)

适应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“ regular”上下文中(例如属性值),{{1 }}无论如何都必须另外进行,它将处理引号(和“&”号,...)。
由于HTMLEncode的上下文情况,<仍被特殊处理,无法使用<script>(在{{1}中使用时,从Javascript代码的角度来看,不会对其进行html解码) }} 标签)。有关HTMLEncode情况的更多信息,请参见here

当然,更好的解决方案是避免将任何Javascript直接放在HTML中,而将所有Javascript放在单独的Javascript文件中。数据应通过html标签上的<script>属性给出。