我正在尝试在JavaScript中取消转义HTML转义的撇号("'"
),但以下代码似乎无法在devtools控制台行中正常工作:
unescape(''');
输出结果很简单:
"'"
在Underscore的unescape中也不起作用:
_.unescape(''')
我做错了什么?
我正在尝试在JavaScript中取消转义HTML转义的撇号("'"
),但以下代码似乎无法在devtools控制台行中正常工作:
unescape(''');
"'"
_.unescape(''')
我做错了什么?
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 || "");
使用像T.J.的回答中所示的createElement
,您会让自己面临XSS攻击的风险。
DOMParser
是一种更加安全的方式,可以正确地取消转义HTML实体(包括'
)。
function unescape(string) {
return new DOMParser().parseFromString(string,'text/html').querySelector('html').textContent;
}
console.log(unescape('''));
unescape
是一个名字不太合适(已经被弃用)的函数,它执行URL解码,而不是HTML解码。 - SLaks