如何编码包含HTML字符的JSON字符串?

时间:2017-06-08 11:22:07

标签: javascript json asp.net-mvc encoding json.net

我有一个ASP.NET MVC视图模型,我需要在页面加载时传递给JavaScript函数,我现在正是这样做的:

<script type="text/javascript">
    $(window).on("load", function () {
        myFunction(@Html.Raw(JsonConvert.SerializeObject(Model)));
    });
</script>

换句话说,我正在使用JSON.NET将模型序列化为JSON,并将其(未编码)插入到我的<script>块中。

渲染时,脚本块最终会显示如下内容:

<script type="text/javascript">
    $(window).on("load", function () {
        myFunction({"myProperty": "the property value"});
    });
</script>

这很有效。但是当我的模型包含一个字符串属性,其文本包含HTML标记*时,这些混淆了浏览器认为<script>块已经结束,并且浏览器开始渲染嵌入在视图模型中的标记。

  • 修改:根据评论,仅当有</script>代码时才会发生这种情况。

例如:

<script type="text/javascript">
    $(window).on("load", function () {
        myFunction({"myProperty": "<script>...</script>"});
    });
</script>

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

这是一个已知问题。 PHP json_encode函数将/编码为\/以避免此问题。

一个简单的解决方案是编写自己的JSON编码包装函数,在JSON编码后用</script>替换<\/script>

也许有更好的解决方案,我不熟悉asp.net。