我将在服务器上组装一个字符串,该字符串将放入客户端的JavaScript变量中。
有什么最佳编码方式可以避免任何问题?
现在在服务器上,我正在执行以下操作:
有什么最佳编码方式可以避免任何问题?
现在在服务器上,我正在执行以下操作:
html = html.Replace("'", "'");
但我认为有一种更优雅、更可靠的方法来完成这样的事情。
html = html.Replace("'", "'");
但我认为有一种更优雅、更可靠的方法来完成这样的事情。
Microsoft.Security.Application.AntiXss.JavaScriptEncode("My 'Quotes' and ""more"".", False)
html = html.Replace("'", "%27");
我不确定你在什么上下文中使用这个字符串,但是\'
可能是你要找的。反斜杠是一个转义字符,它允许你在字符串字面值中使用某些字符,这些字符在其他情况下无法存在。以下是输出JavaScript应该的样子:
alert('It\'s amazing');
alert("It's amazing");
。html = html.Replace("'", "\\'");
另一方面,除了撇号之外,还有其他需要处理的字符。使用Microsoft Anti-Cross Site Scripting Library可以一次性获取所有这些字符。
我发现 AntiXSS 库无法实现我想要的功能,即在服务器端进行编码并在 JavaScript 中进行解码。
相反,我使用了 Microsoft.JScript.dll,它允许您:
GlobalObject.escape(string);
并且在客户端使用JavaScript:
unescape(string);
在字符串值中需要转义的字符是反斜杠和用作字符串定界符的字符。
如果使用撇号(')作为字符串定界符:
html = html.Replace(@"\", @"\\").Replace("'", @"\'");
html = html.Replace(@"\", @"\\").Replace(@"""", @"\""");
如果您不知道使用哪个分隔符,或者它将来可能会更改,您可以同时转义两个:
html = html.Replace(@"\", @"\\").Replace("'", @"\'").Replace(@"""", @"\""");