在 JavaScript 中如何取消转义撇号(')?

7

我正在尝试在JavaScript中取消转义HTML转义的撇号("'"),但以下代码似乎无法在devtools控制台行中正常工作:

unescape(''');

输出结果很简单:
"'"

在Underscore的unescape中也不起作用:
_.unescape(''')

我做错了什么?


5
unescape是一个名字不太合适(已经被弃用)的函数,它执行URL解码,而不是HTML解码。 - SLaks
2个回答

14

unescape与HTML字符实体无关。它是一个旧的、已弃用的函数,用于解码使用escape编码的文本,而escape是一种在现代世界中不太可能有用的文本编码方式。 :-)

如果您需要将HTML转换为纯文本,最简单的方法是通过元素:

var div = document.createElement('div');
div.innerHTML = "'";
alert(div.firstChild.nodeValue);

实时示例 | 实时源代码

请注意,上述代码依赖于HTML文本中未定义任何元素,因此它知道 div 元素只有一个子节点,即文本节点。

对于更复杂的用例,您可能需要使用 div.innerText(如果存在)或 div.textContent

var div = document.createElement('div');
div.innerHTML = "'";
alert(div.innerText || div.textContent || "");

现场示例 | 源代码


10

使用像T.J.的回答中所示的createElement,您会让自己面临XSS攻击的风险。

DOMParser是一种更加安全的方式,可以正确地取消转义HTML实体(包括')。

function unescape(string) {
  return new DOMParser().parseFromString(string,'text/html').querySelector('html').textContent;
}

console.log(unescape('''));

您可以使用上述函数处理来自任何来源的字符串,而该字符串将无法通过包含JavaScript代码来修改您的页面或窃取数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接