JavaScript中的Unescape撇号(')?

Ric*_*ard 4 javascript escaping

我试图"'"在JavaScript中浏览一个HTML转义的撇号(),但以下似乎不适用于devtools控制台行:

unescape(''');
Run Code Online (Sandbox Code Playgroud)

输出很简单:

"'"
Run Code Online (Sandbox Code Playgroud)

它在Underscore的unescape中也不起作用:

_.unescape(''')
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

T.J*_*der 14

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

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

var div = document.createElement('div');
div.innerHTML = "'";
alert(div.firstChild.nodeValue);
Run Code Online (Sandbox Code Playgroud)

实例 | 直播源

请注意,上面的内容依赖于HTML文本中没有定义元素的事实,因此它知道只有一个子节点div,它是一个文本节点.

对于更复杂的用例,您可以使用div.innerText(如果有的话)或div.textContent:

var div = document.createElement('div');
div.innerHTML = "'";
alert(div.innerText || div.textContent || "");
Run Code Online (Sandbox Code Playgroud)

实例 | 直播源


Eth*_*han 7

通过createElement在 TJ 的回答中使用like,您将面临 XSS 攻击。

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

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

console.log(unescape('''));
Run Code Online (Sandbox Code Playgroud)

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