编码撇号

8
我将在服务器上组装一个字符串,该字符串将放入客户端的JavaScript变量中。
有什么最佳编码方式可以避免任何问题?
现在在服务器上,我正在执行以下操作:
 html = html.Replace("'", "'");

但我认为有一种更优雅、更可靠的方法来完成这样的事情。

5个回答

10
你最好使用Microsoft Anti-Cross Site Scripting Library,他们提供了一个JavaScriptEncode方法,可以实现你需要的功能。
Microsoft.Security.Application.AntiXss.JavaScriptEncode("My 'Quotes' and ""more"".", False)

如果您想将其用于警报框等用途,请不要忘记在前端对其进行反转义。 - Drew Freyling

2
html = html.Replace("'", "%27");

1

我不确定你在什么上下文中使用这个字符串,但是\'可能是你要找的。反斜杠是一个转义字符,它允许你在字符串字面值中使用某些字符,这些字符在其他情况下无法存在。以下是输出JavaScript应该的样子:

alert('It\'s amazing');

当然,在这种特定情况下,你可以使用alert("It's amazing");
无论如何,如果您正在构建JavaScript代码:
html = html.Replace("'", "\\'");

另一方面,除了撇号之外,还有其他需要处理的字符。使用Microsoft Anti-Cross Site Scripting Library可以一次性获取所有这些字符。


1

我发现 AntiXSS 库无法实现我想要的功能,即在服务器端进行编码并在 JavaScript 中进行解码。

相反,我使用了 Microsoft.JScript.dll,它允许您:

GlobalObject.escape(string);

并且在客户端使用JavaScript:

unescape(string);

0

在字符串值中需要转义的字符是反斜杠和用作字符串定界符的字符。

如果使用撇号(')作为字符串定界符:

html = html.Replace(@"\", @"\\").Replace("'", @"\'");

如果使用引号(")作为字符串分隔符:
html = html.Replace(@"\", @"\\").Replace(@"""", @"\""");

如果您不知道使用哪个分隔符,或者它将来可能会更改,您可以同时转义两个:

html = html.Replace(@"\", @"\\").Replace("'", @"\'").Replace(@"""", @"\""");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接