将HTML作为JSON传递的最佳实践

时间:2014-11-28 14:00:51

标签: javascript html regex json escaping

根据我所阅读的内容(例如以下链接),您需要在以JSON格式发送HTML时转义\",但这就是您需要的所有内容逃逸。

我有两种获取数据的方法:

1)来自前端

我正在从页面中获取html:

$('#myDiv').html()

这给了我一个包含html,换行符和空格的字符串。

<a class="some-class" href="somepage.html">
    <figure class="someClass">
        <img src="/img/pic.png" alt="">
    </figure>
</a>

我现在可以选择使用JSON.stringify(这显然是不必要的,因为我只需要逃避\和&#34;)来获取:

"<a class=\"some-class\" href=\"somepage.html\">\n        <figure class=\"someClass\"> \n             <img src=\"/img/pic.png\" alt=\"\">\n        </figure>\n    </a>"

然后再JSON.parse将其转回HTML并插入DOM。

或者我可以使用escapeHTML()代替JSON.Stringify:

escapeHTML: function(htmlString) {
         var chr = {
             '"': '&quot;',
             '&': '&amp;',
             "'": '&#39;',
             '/': '&#47;',
             '<': '&lt;',
             '>': '&gt;'
     };

    return html.htmlString(/[\"&'\/<>]/g, function (a) { return chr[a]; });
}

给了我:

&lt;a class=&quot;some-class&quot; href=&quot;somepage.html&quot;&gt;
        &lt;figure class=&quot;someClass&quot;&gt; 
             &lt;img src=&quot;&#47;img&#47;pic.png&quot; alt=&quot;&quot;&gt;
        &lt;&#47;figure&gt;
    &lt;&#47;a&gt; 

然后我可以使用以下解决方案A

来解决它
return $('<textarea/>').html( response ).val();

2)来自后端:

上述方法效果很好,但是如果我得到的响应(来自后端服务)看起来如下(转义&#34;和/),它就不起作用。

<a class=\"some-class\" href=\"somepage.html\">\n<figure class=\"someClass\">\n<img src=\"/img/pic.png\" alt=\"\">\n<\/figure>\n<\/a>

我首先使用解决方案A 。 然后去除\"我使用:

markup.replace('\\"', '"');

显然,这不会删除\/。 我的问题是:如果我要使用\方式,如何将正则表达式与"escapeHTML()结合使用?

将HTML作为JSON传递时,使用escapeHTML()JSON.Stringify会更好吗?

1 个答案:

答案 0 :(得分:1)

经过大量的研究和思考,我们已经决定使用Javascripts自己的内置函数,而不是手动执行某些操作。

因此我们将JSON.stringifyJSON.parse结合使用,并告诉后端简单地对其标记进行html编码,而不是手动转义"/