当前位置:  开发笔记 > 编程语言 > 正文

如何使用jQuery解码HTML实体?

如何解决《如何使用jQuery解码HTML实体?》经验,为你挑选了7个好方法。

如何使用jQuery解码字符串中的HTML实体?



1> 小智..:

安全说明:使用此答案(保存在下面的原始格式中)可能会在您的应用程序中引入XSS漏洞.你不应该使用这个答案.阅读lucascaro的答案,解释这个答案中的漏洞,并使用答案中的方法或Mark Amery的答案.

实际上,试试吧

var decoded = $("
").html(encodedStr).text();


请不要**使用不受信任的输入执行此操作.即使节点未附加到DOM,许多浏览器也会加载图像和触发相关事件.尝试运行`$("
").html('')`.在Firefox或Safari中,它会触发警报.
@ekkis,你需要在尝试解码实体之前剥离标签.`str.replace(/ <\ /?\ w(?:[^"'>] |"[^"]*"|'[^']*')*>/g,"")`或类似的东西.
@MichaelStum你的编辑在这里使Mike Samuel的评论和下一个最高投票的答案无效,并且没有实际修复所有jQuery版本的XSS漏洞*(如下面的答案所述).为这个答案添加安全警告是合理的(我将这样做); 在这个页面上进行其他讨论是荒谬的,而未能真正修复安全漏洞绝对不是!
一个更好的实现(在我看来)从输入中删除了大多数HTML标签(由迈克提供)是我对[类似问题](http://stackoverflow.com/a/9609450/24950)的回答.它也没有jQuery的开销,所以它非常适合其他环境.

2> lucascaro..:

没有任何jQuery:

function decodeEntities(encodedString) {
  var textArea = document.createElement('textarea');
  textArea.innerHTML = encodedString;
  return textArea.value;
}

console.log(decodeEntities('1 & 2')); // '1 & 2'


3> Alan Hamlett..:

就像Mike Samuel所说,不要使用jQuery.html().text()来解码html实体,因为它不安全.

相反,使用来自@ VyvIT评论的Mustache.js或decodeEntities等模板渲染器.

Underscore.js公用事业带库带有escapeunescape方法,但它们都没有用户输入的安全:

_.escape(串)

_.unescape(串)


github上的bug被关闭为"Will not fix"; 这意味着此解决方案不起作用,不起作用.
`_.capecape("'")`只会产生"'" 而不是单引号.是否有我遗漏的内容或者下划线没有转义为HTML实体代码,如下所示:http://www.w3schools.com/tags/ref_entities.asp
你说Underscore的*"`escape`和`unescape`方法......对于用户输入来说是不安全的"*.你这是什么意思?这对我来说听起来像是胡说八道,但也许我错过了一些东西 - 你能澄清一下吗?
这实际上值得更多的赞成!绝对是我的首选解决方案.到目前为止,他们在文档中包含了"unes​​cape",顺便说一下.
@VyvIT尝试使用_.unescape(“&lt; img src = fake onerror = alert('boo!')&gt;”))(在Chrome / FF / IE中)。但是它*没有*显示任何警报。在控制台中进行了尝试,并将其放入我的JS文件中。结果相同。

4> Canavar..:

我认为你混淆了文本和HTML方法.看看这个例子,如果你使用元素的内部HTML作为文本,你将得到解码的HTML标签(第二个按钮).但是如果你将它们用作HTML,你将获得HTML格式的视图(第一个按钮).

here is a HTML content.

  

Results here !

第一个按钮写道:这是一个HTML内容.

第二个按钮写道:这是一个 HTML 内容.

顺便说一下,你可以看到我在jQuery插件中找到的插件 - HTML解码和编码,用于编码和解码HTML字符串.



5> Rondo..:

这个问题受到'with jQuery'的限制,但它可能有助于一些人知道在这里的最佳答案中给出的jQuery代码在下面做了以下...这有或没有jQuery:

function decodeEntities(input) {
  var y = document.createElement('textarea');
  y.innerHTML = input;
  return y.value;
}



6> Mark Amery..:

您可以使用他的库,可从https://github.com/mathiasbynens/he获得

例:

console.log(he.decode("Jörg & Jürgen rocked to & fro "));
// Logs "Jörg & Jürgen rocked to & fro"

我向图书馆的作者提出了一个问题,即是否有任何理由在客户端代码中使用此库以支持此处和其他地方的其他答案中

手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有