根据我所阅读的内容(例如以下链接),您需要在以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 = {
'"': '"',
'&': '&',
"'": ''',
'/': '/',
'<': '<',
'>': '>'
};
return html.htmlString(/[\"&'\/<>]/g, function (a) { return chr[a]; });
}
给了我:
<a class="some-class" href="somepage.html">
<figure class="someClass">
<img src="/img/pic.png" alt="">
</figure>
</a>
然后我可以使用以下解决方案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
会更好吗?
答案 0 :(得分:1)
经过大量的研究和思考,我们已经决定使用Javascripts自己的内置函数,而不是手动执行某些操作。
因此我们将JSON.stringify
与JSON.parse
结合使用,并告诉后端简单地对其标记进行html编码,而不是手动转义"
和/
。