我正在服务器上构建一个字符串,该字符串将被放入客户端的javascript变量中。
最好对此进行编码以避免任何问题
现在在服务器上我正在做这样的事情:
html = html.Replace("'", "'");
但我认为有一种更优雅的方式来做这样的事情。
答案 0 :(得分:10)
你最好使用Microsoft Anti-Cross Site Scripting Library来做这件事。它们提供了一个符合你想要的JavaScriptEncode方法:
Microsoft.Security.Application.AntiXss.JavaScriptEncode("My 'Quotes' and ""more"".", False)
答案 1 :(得分:1)
我不确定您在哪个上下文中使用此字符串,但\'
可能就是您要查找的内容。反斜杠是一个转义字符,允许您使用字符串文字中不存在的certain characters。这就是输出JavaScript的样子:
alert('It\'s amazing');
当然,在这种特殊情况下你可以使用alert("It's amazing");
。
无论如何,如果你正在构建JavaScript代码:
html = html.Replace("'", "\\'");
另一方面,除了撇号之外还有其他字符需要一些处理。使用Microsoft Anti-Cross Site Scripting Library可以立即获得所有这些内容。
答案 2 :(得分:1)
html = html.Replace("'", "%27");
答案 3 :(得分:1)
我发现AntiXSS库无法完成我想要的工作,即编码服务器端并在javascript中解码。
相反,我使用了Microsoft.JScript.dll,它允许您:
GlobalObject.escape(string);
在javascript中的客户端:
unescape(string);
答案 4 :(得分:0)
您需要在字符串值中转义的字符是反斜杠和用作字符串分隔符的字符。
如果撇号(')用作字符串分隔符:
html = html.Replace(@"\", @"\\").Replace("'", @"\'");
如果引号(“)用作字符串分隔符:
html = html.Replace(@"\", @"\\").Replace(@"""", @"\""");
如果您不知道使用了哪个分隔符,或者将来可能会更改分隔符,您可以放弃这两个分隔符:
html = html.Replace(@"\", @"\\").Replace("'", @"\'").Replace(@"""", @"\""");