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

Sco*_*ord 5 .net asp.net encoding

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

<html>
...
<script>
   alert('<%= this.MyStringHere %>');
</script>
</html>
Run Code Online (Sandbox Code Playgroud)

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

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

Kna*_*ģis 10

您只需编写脚本以供JS使用,无需使用HTML编码进行双重编码.只是HTML编码不起作用,因为它不会编码\n等.

<script>
   alert(<%=HttpUtility.JavaScriptStringEncode(this.MyStringHere, true)%>);
   alert("<%=HttpUtility.JavaScriptStringEncode(this.MyStringHere, false)%>");
</script>
Run Code Online (Sandbox Code Playgroud)

请注意,JavaScriptStringEncode默认情况下不会添加双引号 - 请参阅官方文档.

如果您安装了服务器端JSON包,您也可以使用它 - 它也适用于数组,字典等.请注意,它还会为字符串添加引号,因此您不必自行添加它们.

您还必须记住,您不能使用<%: text %>语法,因为它执行HTML编码.在MVC Razor视图中,您甚至必须使用显式禁用HTML编码@Html.Raw(Json.Encode(...)).