如何使用jQuery解码字符串中的HTML实体?
如何使用jQuery解码HTML实体?
对于ExtJS用户,如果您已经有了编码的字符串,例如,当库函数的返回值是innerHTML内容时,请考虑以下ExtJS函数:
Ext.util.Format.htmlDecode(innerHtmlContent)
我只需要将HTML实体字符(⇓)作为HTML按钮的值即可。HTML代码从浏览器开始就看起来不错:
<input type="button" value="Embed & Share ⇓" id="share_button" />
现在,我添加了一个切换开关,该切换开关也应显示字符。这是我的解决方案
$("#share_button").toggle(
function(){
$("#share").slideDown();
$(this).attr("value", "Embed & Share " + $("<div>").html("⇑").text());
}
这将再次在按钮中显示⇓。我希望这可以帮助某人。
您可以使用he库,该库可从https://github.com/mathiasbynens/he获得
例:
console.log(he.decode("Jörg & Jürgen rocked to & fro "));
// Logs "Jörg & Jürgen rocked to & fro"
我质疑图书馆的作者是否有任何理由在客户端代码中使用此图书馆,以支持此处及其他地方的其他答案中<textarea>
提供的技巧。他提供了一些可能的理由:
如果您在服务器端使用node.js,则使用用于HTML编码/解码的库可为您提供一个在客户端和服务器端均可使用的解决方案。
某些浏览器的实体解码算法存在错误或缺少对某些命名字符引用的支持。例如,Internet Explorer将
正确地解码和呈现不间断空格(),但将它们报告为普通空间,而不是通过DOM元素的innerText
属性将其报告为不间断空格,从而打破了<textarea>
hack(尽管只是次要的)。此外,IE 8和IE 9根本不支持 HTML 5中添加的任何新的命名字符引用。他的作者还在http://mathias.html5.org/tests/html上托管了对命名字符引用支持的测试。/ named-character-references /。在IE 8中,它报告超过一千个错误。如果您想避免与实体解码有关的浏览器错误和/或能够处理所有命名字符引用,则无法逃脱
<textarea>
;你需要像他这样的图书馆。他只是觉得很好,感觉用这种方式做事不太hacky。
就像Mike Samuel所说的那样,不要使用jQuery.html()。text()来解码html实体,因为这样做是不安全的。
取而代之的是,使用模板渲染器(例如Mustache.js或@VyvIT注释中的encodeEntities)。
Underscore.js实用程序带库带有escape
和unescape
方法,但是对于用户输入而言,它们并不安全:
安全说明:使用此答案(下面以其原始形式保留)可能会在您的应用程序中引入XSS漏洞。您不应该使用此答案。阅读lucascaro的答案以获取对该答案中漏洞的解释,然后改用该答案或Mark Amery的答案中的方法。
其实试试看
var decoded = $("<div/>").html(encodedStr).text();
我认为这与选择的解决方案完全相反。