gpt4 book ai didi

javascript - 在 JavaScript 中取消转义 HTML 实体?

转载 作者:行者123 更新时间:2023-12-05 07:55:59 24 4
gpt4 key购买 nike

我有一些与 XML-RPC 后端通信的 JavaScript 代码。XML-RPC 返回以下形式的字符串:

<img src='myimage.jpg'>

但是,当我使用 JavaScript 将字符串插入 HTML 时,它们会按字面意思呈现。我没有看到图像,我真的看到了字符串:

<img src='myimage.jpg'>

我的猜测是 HTML 正在通过 XML-RPC channel 转义。

如何在 JavaScript 中取消转义字符串?我尝试了此页面上的技术,但未成功:http://paulschreiber.com/blog/2008/09/20/javascript-how-to-unescape-html-entities/

诊断问题的其他方法有哪些?

最佳答案

这里给出的大多数答案都有一个很大的缺点:如果您尝试转换的字符串不受信任,那么您最终会得到一个 Cross-Site Scripting (XSS) vulnerability。 .对于 accepted answer 中的函数, 请考虑以下内容:

htmlDecode("<img src='dummy' onerror='alert(/xss/)'>");

这里的字符串包含一个未转义的 HTML 标记,因此 htmlDecode 函数不会解码任何内容,而是实际运行字符串中指定的 JavaScript 代码。

这可以通过使用 DOMParser 来避免。 all modern browsers 支持:

function htmlDecode(input) {
var doc = new DOMParser().parseFromString(input, "text/html");
return doc.documentElement.textContent;
}

console.log( htmlDecode("&lt;img src='myimage.jpg'&gt;") )
// "<img src='myimage.jpg'>"

console.log( htmlDecode("<img src='dummy' onerror='alert(/xss/)'>") )
// ""

此函数保证不会运行任何 JavaScript 代码作为副作用。任何 HTML 标签都将被忽略,仅返回文本内容。

兼容性说明:使用 DOMParser 解析 HTML 至少需要 Chrome 30、Firefox 12、Opera 17、Internet Explorer 10、Safari 7.1 或 Microsoft Edge。因此,所有不支持的浏览器都已经过了 EOL,截至 2017 年,唯一仍能偶尔在野外看到的浏览器是较旧的 Internet Explorer 和 Safari 版本(通常这些浏览器的数量仍然不足以打扰)。

关于javascript - 在 JavaScript 中取消转义 HTML 实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28993723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com