Javascript解码html实体

IT技术 javascript jquery
2021-01-19 15:28:48

可能的重复:
如何使用 jQuery 解码 HTML 实体?

我想转换这个文本:

"<p>name</p><p><span style="font-size:xx-small;">ajde</span></p><p><em>da</em></p>"

到 html,带有标签和 Javascript 或 Jquery 中的所有内容。这个怎么做?

4个回答
var text = '<p>name</p><p><span style="font-size:xx-small;">ajde</span></p><p><em>da</em></p>';
var decoded = $('<textarea/>').html(text).text();
alert(decoded);

这会设置新元素的innerHTML(未附加到页面),导致jQuery 将其解码为HTML,然后使用.text() 将其拉回。

现场演示

不要使用$('<div/>')-我不会进行可能的 XSS 攻击。利用$('<textarea/>');
2021-03-20 15:28:48
这是一个非常糟糕的主意,因为它允许 HTML 注入。例如,如果在传入的文本中有这样的内容:<script>alert(code injection')</script>它将在用户屏幕上显示警报。
2021-03-26 15:28:48
如果是文字"><img src=x onerror=prompt(1)>呢?
2021-03-27 15:28:48
当编码的字符串在标签之间包含Enter符号时,这将只返回Enter而不是 html(至少在 Chrome 中)。为了解决它,我将解决方案更改为$('<textarea/>').html(text).html()
2021-03-28 15:28:48
我不确定这是否也合适(我使用的是 jQuery 2.x): $.parseHTML(text)[0].textContent;
2021-03-29 15:28:48

这个线程中有一个 jQuery 解决方案尝试这样的事情:

var decoded = $("<div/>").html('your string').text();

这会设置一个新<div>元素的 innerHTML (未附加到页面),导致 jQuery 将其解码为 HTML,然后使用.text().

不在火狐下工作
2021-03-21 15:28:48

使用 jQuery 最简单的是:

var text = '&lt;p&gt;name&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:xx-small;"&gt;ajde&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;da&lt;/em&gt;&lt;/p&gt;';

var output = $("<div />").html(text).text();
console.log(output);

演示: http : //jsfiddle.net/LKGZx/

与其他两个答案相同。如果您删除答案,您将获得荣誉徽章:)
2021-03-23 15:28:48

我想你在找这个?

$('#your_id').html('&lt;p&gt;name&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:xx-small;"&gt;ajde&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;da&lt;/em&gt;&lt;/p&gt;').text();