一尘不染

解码并返回到JavaScript

javascript

我有像

var str = 'One & two & three';

由Web服务器呈现为HTML。我需要将这些字符串转换为

'One & two & three'

当前,这就是我正在做的事情(借助于jQuery):

$(document.createElement('div')).html('{{ driver.person.name }}').text()

但是我有一种不安的感觉,我做错了。我努力了

unescape("&")

但它似乎无效,decodeURI / decodeURIComponent也无效。

还有其他更自然,更优雅的方式吗?


阅读 236

收藏
2020-04-25

共1个答案

一尘不染

用于从JavaScript解释HTML(文本和其他形式)的一个更现代的选项是DOMParserAPI中的HTML支持。这使您可以使用浏览器的本机HTML解析器将字符串转换为HTML文档。自2014年底以来,所有主要浏览器的新版本均已支持该功能。

如果我们只想解码一些文本内容,则可以将其作为唯一的内容放入文档正文中,解析文档,然后将其拉出.body.textContent

var encodedStr = 'hello & world';



var parser = new DOMParser;

var dom = parser.parseFromString(

    '<!doctype html><body>' + encodedStr,

    'text/html');

var decodedString = dom.body.textContent;



console.log(decodedString);

我们可以在规范草案中DOMParser看到,已解析的文档未启用JavaScript,因此我们可以执行此文本转换而无需担心安全性。

parseFromString(str, type)方法必须运行以下步骤,具体取决于 类型

  • "text/html"

用an 解析 strHTML parser,并返回新创建的Document

脚本标记必须设置为“禁用”。

注意

script元素被标记为不可执行,并且将其内容noscript解析为标记。

这超出了此问题的范围,但是请注意,如果您要获取解析的DOM节点本身(而不仅仅是它们的文本内容)并将其移至实时文档DOM,则可能会重新启用其脚本,并且可以出于安全考虑。我尚未对此进行研究,因此请谨慎行事。

2020-04-25