繁体   English   中英

将HTML作为JSON传递的最佳做法

[英]Best practices for passing HTML as JSON

根据我所读的内容(例如下面的链接),当以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 (显然这是不必要的,因为我只需要转义\\和“)即可:

"<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)从后端:

上面的方法很好用,但是如果我(从后端服务)获得的响应看起来像下面的内容(“和/”转义),则它不起作用。

<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

经过大量研究和思考,我们决定使用自己内置的Javascript更好,而不是手动执行。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM