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)
通过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 来修改您的页面或窃取数据。
| 归档时间: |
|
| 查看次数: |
6085 次 |
| 最近记录: |