【问题标题】:Javascript decoding html entities [duplicate]Javascript解码html实体[重复]
【发布时间】:2012-05-29 18:09:53
【问题描述】:

可能重复:
How to decode HTML entities using jQuery?

我想转换这段文字:

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

到 html,带有标签和 Javascript 或 Jquery 中的所有内容。如何做到这一点?

【问题讨论】:

  • 您的最终导出:

    name

    ajde

标签: javascript jquery


【解决方案1】:
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() 将其拉回。

Live demo.

【讨论】:

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

this thread 中有一个 jQuery 解决方案。试试这样的:

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

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

【讨论】:

  • 在 Firefox 中不工作
【解决方案3】:

使用 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/

【讨论】:

  • 与其他两个答案相同。如果您删除答案,您将获得荣誉徽章:)
【解决方案4】:

我想你正在寻找这个?

$('#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();

【讨论】:

    猜你喜欢
    • 2014-01-15
    • 2011-08-13
    • 1970-01-01
    • 2018-01-14
    • 2013-03-20
    相关资源
    最近更新 更多