来自 underscore.js 的 unescape() 函数不工作

unescape() function from underscore.js not working

我需要解码 html 个实体,例如:&<>"`'.

按照此 SO post, I was trying to use _.unescape() from underscore.js 中对此任务的建议。

不过,unescape()好像没有什么作用。当我称之为例如在以下字符串中,它只是 returns 字符串本身:

const line = 'Tweag I/O | Paris, France &amp Berlin, Germany | Full-time. Give us a shout at jobs@tweag.io!'

要验证,您可以转到 JSBin 并粘贴以下代码:

const line = 'Tweag I/O | Paris, France &amp Berlin, Germany | Full-time. Give us a shout at jobs@tweag.io!'
console.log(line)

const decodedLine = unescape(line)
console.log(decodedLine)

不要忘记添加 underscore.js 库,方法是从点击 Add library 按钮时出现的下拉列表中选择它。

更新

如@DanPrince 的回答所述,unescape() 仅解码一组有限的字符:

&<>"`'

但是,将我的行从上面的示例更改为以下示例仍然不起作用(即使这次我使用 '&):

const line = `'Tweag I'O | Paris, France & Berlin, Germany | Full-time. Give us a shout at jobs@tweag.io!'` 

最终更新

我使用不同的库解决了我的问题。我现在使用的是 he,而不是 underscore.js,它完全 提供了我正在寻找的功能。

现在,我只需调用 decode(line)all html 实体即可正确翻译。不过,我会跟进这个问题的答案,并接受解释为什么 unescape() 无法按预期工作的答案。

看下划线the source,一切都是通过以下映射翻译的。

var escapeMap = {
  '&': '&',
  '<': '&lt;',
  '>': '&gt;',
  '"': '&quot;',
  "'": '&#x27;',
  '`': '&#x60;'
};
var unescapeMap = _.invert(escapeMap);

字符串中的两个转义实体是 &#x2F;&amp,它们都没有出现在转义图中。您可以通过添加分号来修复 &amp;

虽然效率不是特别高,但您可以使用 answer suggested here

此外,当我在 jsbin 中使用 _.unescape 时,我得到了预期的行为,而我认为您的代码使用了本机 unescape 函数。