underscore.js中的unescape()函数不起作用

unescape() function from underscore.js not working

本文关键字:函数 不起作用 unescape js 中的 underscore      更新时间:2023-10-19

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

正如这篇SO文章中所推荐的,我试图使用underscore.js中的_.unescape()来完成这项任务。

然而,unescape()似乎没有任何作用。当我调用它时,例如在以下字符串上,它只返回字符串本身:

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()只解码有限的一组字符:

&<>"`'

但是,把我的台词从上面的例子改成下面的仍然没有;t工作(即使这次我使用'&):

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

最终更新

我用另一个图书馆解决了我的问题。我现在使用的不是underscore.js,而是他提供了我想要的功能。

现在,我可以调用decode(line)所有html实体都得到正确的翻译。然而,我将跟进这个问题的答案,并接受解释unescape()为什么不能按预期工作的答案。

查看下划线的来源,所有内容都通过以下映射进行转换。

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

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

虽然它不是特别有效,但你可以使用这里建议的答案。

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