如何使用jQuery解码HTML实体?

JavaScript HTML

蛋蛋猿

2020-03-23

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

第3080篇《如何使用jQuery解码HTML实体?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

6个回答
村村 2020.03.23

我认为这与选择的解决方案完全相反。

var decoded = $("<div/>").text(encodedStr).html();
GOL蛋蛋 2020.03.23

对于ExtJS用户,如果您已经有了编码的字符串,例如,当库函数的返回值是innerHTML内容时,请考虑以下ExtJS函数:

Ext.util.Format.htmlDecode(innerHtmlContent)
卡卡西梅Harry 2020.03.23

我只需要将HTML实体字符(⇓)作为HTML按钮的值即可。HTML代码从浏览器开始就看起来不错:

<input type="button" value="Embed & Share  &dArr;" id="share_button" />

现在,我添加了一个切换开关,该切换开关也应显示字符。这是我的解决方案

$("#share_button").toggle(
    function(){
        $("#share").slideDown();
        $(this).attr("value", "Embed & Share " + $("<div>").html("&uArr;").text());
    }

这将再次在按钮中显示⇓。我希望这可以帮助某人。

LStafan小宇宙 2020.03.23

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

例:

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

质疑图书馆的作者是否有任何理由在客户端代码中使用此图书馆,以支持此处及其他地方的其他答案中<textarea>提供技巧他提供了一些可能的理由:

  • 如果您在服务器端使用node.js,则使用用于HTML编码/解码的库可为您提供一个在客户端和服务器端均可使用的解决方案。

  • 某些浏览器的实体解码算法存在错误或缺少对某些命名字符引用的支持例如,Internet Explorer将&nbsp;正确地解码和呈现不间断空格(),但将它们报告为普通空间,而不是通过DOM元素的innerText属性将其报告为不间断空格,从而打破了<textarea>hack(尽管只是次要的)。此外,IE 8和IE 9根本不支持 HTML 5中添加的任何新的命名字符引用。的作者还在http://mathias.html5.org/tests/html上托管了对命名字符引用支持的测试。/ named-character-references /在IE 8中,它报告超过一千个错误。

    如果您想避免与实体解码有关的浏览器错误和/或能够处理所有命名字符引用,则无法逃脱<textarea>你需要像这样的图书馆

  • 他只是觉得很好,感觉用这种方式做事不太hacky。

逆天乐 2020.03.23

就像Mike Samuel所说的那样,不要使用jQuery.html()。text()来解码html实体,因为这样做是不安全的。

取而代之的是,使用模板渲染器(例如Mustache.js@VyvIT注释中的encodeEntities)。

Underscore.js实用程序带库带有escapeunescape方法,但是对于用户输入而言,它们并不安全:

_.escape(字符串)

_.unescape(字符串)

逆天猿 2020.03.23

安全说明:使用此答案(下面以其原始形式保留)可能会在您的应用程序中引入XSS漏洞您不应该使用此答案。阅读lucascaro的答案以获取对该答案中漏洞的解释,然后改用该答案或Mark Amery的答案中的方法

其实试试看

var decoded = $("<div/>").html(encodedStr).text();

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android