如果在HTML <script>标签内部,我应该同时使用HtmlEncode和JavaScriptStringEncode吗?</script>

时间:2013-10-11 14:37:38

标签: asp.net .net encoding

我想在.NET中呈现一个发往Javascript的字符串,比如说:

<html>
...
<script>
   alert('<%= this.MyStringHere %>');
</script>
</html>

我应该如何编码MyStringHere?我需要HttpUtility.HtmlEncode(HttpUtility.JavaScriptStringEncode(unencodedString))还是仅HttpUtility.JavaScriptStringEncode(unencodedString)?或者都错了?

您也可以在答案中提及替代服务器标签&lt;%solutions,但我正在寻找基于代码的解决方案,这个例子有点人为。

1 个答案:

答案 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编码。