6

我正在尝试"'"在 JavaScript 中取消转义 HTML 转义撇号 ( ),但以下内容似乎不适用于 devtools 控制台行:

unescape(''');

输出很简单:

"'"

它也不适用于 Underscore 的 unescape:

_.unescape(''')

我究竟做错了什么?

4

2 回答 2

14

unescape与 HTML 字符实体无关。这是一个旧的、已弃用的函数,用于解码用 编码的文本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 || "");

实例| 直播源

于 2013-08-07T14:33:01.263 回答
9

通过createElement在 TJ 的回答中使用 like,您可以向 XSS 攻击敞开大门。

DOMParser是正确取消转义 HTML 实体(包括)的更安全的方法'

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

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

您可以将上述函数与来自任何来源的字符串一起使用,并且该字符串将无法通过包含 JavaScript 来修改您的页面或窃取数据。

于 2019-02-26T22:07:10.533 回答