我正在尝试在JavaScript中浏览HTML转义的撇号("'"
),但以下似乎不适用于devtools控制台行:
unescape(''');
输出只是:
"'"
它在Underscore的unescape中不起作用:
_.unescape(''')
我做错了什么?
答案 0 :(得分:12)
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 || "");
答案 1 :(得分:0)
通过像T.J.的答案中那样使用createElement
,您可以面对XSS攻击。
DOMParser
是much safer way,可以正确地转义HTML实体(包括'
)
function unescape(string) {
return new DOMParser().parseFromString(string,'text/html').querySelector('html').textContent;
}
console.log(unescape('''));
您可以将上述函数与任何来源的字符串一起使用,并且该字符串将无法通过包含JavaScript来修改页面或窃取数据。