我想在.NET中呈现一个发往Javascript的字符串,比如说:
<html>
...
<script>
alert('<%= this.MyStringHere %>');
</script>
</html>
我应该如何编码MyStringHere?我需要HttpUtility.HtmlEncode(HttpUtility.JavaScriptStringEncode(unencodedString))
还是仅HttpUtility.JavaScriptStringEncode(unencodedString)
?或者都错了?
您也可以在答案中提及替代服务器标签&lt;%solutions,但我正在寻找基于代码的解决方案,这个例子有点人为。
答案 0 :(得分:10)
您只需编写脚本以供JS使用,无需使用HTML编码进行双重编码。只是HTML编码不起作用,因为它不会编码\n
等。
<script>
alert(<%=HttpUtility.JavaScriptStringEncode(this.MyStringHere, true)%>);
alert("<%=HttpUtility.JavaScriptStringEncode(this.MyStringHere, false)%>");
</script>
请注意,JavaScriptStringEncode
默认情况下不会添加双引号 - see official docs。
如果你安装了服务器端JSON包,你也可以使用它 - 它也适用于数组,字典等。注意它也会为字符串添加引号,所以你不要自己添加它们。
您还必须记住,您不能使用<%: text %>
语法,因为它会执行HTML编码。在MVC Razor视图中,您甚至必须使用@Html.Raw(Json.Encode(...))
明确禁用HTML编码。