在 JavaScript 中取消转义 HTML 实体?

2024-03-24

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

<img src='myimage.jpg'>

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

<img src='myimage.jpg'>

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

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

还有哪些其他方法可以诊断该问题?


这里给出的大多数答案都有一个巨大的缺点:如果您尝试转换的字符串不可信,那么您最终会得到一个跨站脚本 (XSS) 漏洞 https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML#Security_considerations。对于函数中的接受的答案 https://stackoverflow.com/a/1912522/785541, 考虑以下:

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

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

这可以通过使用来避免DOM解析器 https://developer.mozilla.org/en-US/docs/Web/API/DOMParser这是支持的所有现代浏览器 https://developer.mozilla.org/en-US/docs/Web/API/DOMParser#Browser_compatibility:

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 标签都将被忽略,仅返回文本内容。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 JavaScript 中取消转义 HTML 实体? 的相关文章

随机推荐

  • 将 PIL 图像转换为字节数组

    在 C 中 我可以使用Bitmap lockbits 以字节数组形式访问位图 如何在 PIL 中执行此操作 我努力了Image write 但它将完整格式的图像写入流中 from io import BytesIO from PIL imp
  • 当值为 None 或空字符串时排序 python

    我有一个包含字典的列表 其中我根据不同的值对它们进行排序 我用这些代码行来做到这一点 def orderBy self col dir objlist if dir asc sorted objects sorted objlist key
  • 无法加载文件或程序集“System.Web.Optimization,Version=1.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”

    尽管我已经安装了 Microsoft AspNet Web Optimization 的 nuget 包 但我不断收到此错误 无法加载文件或程序集 System Web Optimization 版本 1 0 0 0 文化 中性 Publi
  • Bitbucket 管道部署到 gCloud AppEngine 导致 [13] 发生内部错误

    我正在尝试在我的项目中使用 bitbucket 管道 我用的是Nodejs 当我跑步时gcloud app deploy从 Mac 或 Windows 手动 工作正常 部署成功完成 但从 bitbucket 管道中它失败了错误响应 13 发
  • 关于数据框警告切片的 pandas 副本的混淆

    我已经浏览了一系列与此问题相关的问题和答案 但我仍然发现我在意想不到的地方收到了切片警告的副本 此外 它突然出现在我之前运行良好的代码中 让我想知道是否某种更新可能是罪魁祸首 例如 这是一组代码 我所做的就是将 Excel 文件读入 pan
  • 函数声明“sub function($$)”是什么意思?

    我使用 Perl 一段时间了 但今天我遇到了这段代码 sub function1 snip 这在 Perl 中意味着什么 它是一个带有原型 http perldoc perl org perlsub html Prototypes这需要两个
  • Internet Explorer 7 中的 CSS 下拉菜单爆炸

    我正在创建一个带有下拉菜单的设计 一切都在现代浏览器 即 Firefox Chrome Opera Safari 和 IE9 中运行良好 但是 由于使用 IE7 和 IE8 的访问者数量较多 我还需要使菜单与这些版本的 Internet E
  • 如何在使用 angularjs 更新控制器中的新数据之前销毁莫里斯图表数据?

    我正在使用 angularjs 根据所选项目加载图表 如果我选择第一个项目 我将在控制器功能中获取详细信息并显示它 当我选择下一个项目时 图形加载 但第一个选定项目的详细信息不会被破坏 如果我选 择 4 个项目 则显示 4 次图形 如何清除
  • DDD:我真的需要加载聚合中的所有对象吗? (性能问题)

    在 DDD 中 存储库加载整个聚合 我们要么加载全部 要么不加载 这也意味着应该避免延迟加载 我关心的是性能方面的问题 如果这导致将数千个对象加载到内存中怎么办 例如 聚合Customer一万回来Orders 在这种情况下 是否意味着我需要
  • .vimrc:第 4 行:意外标记“(”附近的语法错误[重复]

    这个问题在这里已经有答案了 我正在尝试配置 Vim 但是当我尝试获取来源时 vimrc编辑文件后出现以下错误 源 vimrc bash let g plug shallow 0 未找到命令 bash Users stevenaguilar
  • Nodemon 错误:“已达到文件观察器数量的系统限制”

    我在学GraphQL https en wikipedia org wiki GraphQL我正在使用prisma binding用于 GraphQL 操作 我正面临着这个nodemon当我启动 Node js 服务器时出现错误 它给了我由
  • 如何“chartr”“-”(或转义范围)?

    在 R 中可以使用chartr将字符从一种更改为另一种 例如 chartr aor u Stackoverflow 1 Stuck ve fl w 模式可以是范围 例如chartr a hwo 0 9 Stackoverflow 但长度需要
  • 鸢尾花数据集未显示“物种”列

    我正在 Python 上使用 numpy 和 pandas 来学习如何处理数据帧 我正在 Collaboratory 上编码 并且已加载 Iris 数据集 但由于某种原因 我的数据框中没有 物种 列 也许我以错误的方式加载了它 我很乐意就此
  • 数据库MN关系

    我正在上数据库管理系统课程 绝对初学者 并且正在为一个非常简单的博客系统开发数据库 我有一个关于博客文章和帖子所属类别之间的 M N 关系的问题 一篇博客文章可以属于多个类别 该方案的部分如下所示 Scheme http creo prev
  • CocoaPods 和 GitHub 分叉

    这是我第一次 fork GitHub 项目 我对 CocoaPods 也不太熟悉 所以请耐心等待 基本上 我在 GitHub 上分叉了一个项目 在我的项目中使用了以下内容Podfile pod REActivityViewControlle
  • 找到所需类 javax.faces.FactoryFinder 的多个版本

    我开始使用 JSF2 0 我按照教程进行操作 没有任何问题 一切正常 我使用 Eclipse Helios 但我注意到一些我无法理解的事情 该教程说要为 JSF 2 添加 Project Facet 我没有做这样的事情 一切正常 因此 为了
  • 将元素上具有多个 Css 类的 HTML 文件导入 Excel 时出现问题

    如果为 HTML 元素指定了多个 CSS 类 Excel 看起来不会理解 HTML 属性 class 例如 如果 class A B 指向标签 TD Excel 将为该标签使用空样式 我有这些 html 代码
  • 如何在Python中读取键盘输入

    我在 Python 中遇到键盘输入问题 我尝试了 raw input 并且它只被调用一次 但我想在用户每次按任意键时读取键盘输入 我该怎么做 感谢您的回答 例如 你有这样的 Python 代码 file1 py bin python do
  • Likert 数据的 R 频率表

    我认为这是一项基本任务 但事实证明并非如此 我有一系列调查 需要将其转换为每个调查的频率表 例如 调查 1 包含 6 个问题 参与者有 5 个回答选项 对于每项调查 我需要生成一个表格 其中包含每个问题 在本示例中有 6 个 以及对每个问题
  • 在 JavaScript 中取消转义 HTML 实体?

    我有一些与 XML RPC 后端通信的 JavaScript 代码 XML RPC 返回以下形式的字符串 img src myimage jpg 但是 当我使用 JavaScript 将字符串插入 HTML 时 它们会按字面意思呈现 我没有