JavaScript中的Unescape撇号(')?

时间:2013-08-07 14:31:08

标签: javascript escaping

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

unescape(''');

输出只是:

"'"

它在Underscore的unescape中不起作用:

_.unescape(''')

我做错了什么?

2 个答案:

答案 0 :(得分:12)

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

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

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

Live Example | Live Source

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

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

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

Live Example | Live Source

答案 1 :(得分:0)

通过像T.J.的答案中那样使用createElement,您可以面对XSS攻击。

DOMParsermuch safer way,可以正确地转义HTML实体(包括'

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

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

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