【问题标题】:Unescape apostrophe (') in JavaScript?在JavaScript中取消转义撇号(')?
【发布时间】:2013-08-07 14:31:07
【问题描述】:

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

unescape(''');

输出很简单:

"'"

在 Underscore 的 unescape 中也不起作用:

_.unescape(''')

我做错了什么?

【问题讨论】:

  • unescape 是一个名称不佳(且已弃用)的函数,它执行 URL 解码,而不是 HTML 解码。

标签: javascript escaping


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    通过在 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 来修改您的页面或窃取数据。

    【讨论】:

      猜你喜欢
      • 2013-03-26
      • 2011-02-08
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      • 2011-04-08
      • 2014-02-22
      • 2022-11-15
      • 2012-03-24
      相关资源
      最近更新 更多