从 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)%>
如何使用 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)%>