【问题标题】:YouTube videos API snippet title contains special characters in Next.jsYouTube 视频 API 片段标题包含 Next.js 中的特殊字符
【发布时间】:2020-06-25 08:47:55
【问题描述】:

我想获得不包含特殊字符的正确视频 sn-p 标题。 我正在使用 API:

https://www.googleapis.com/youtube/v3/search,

带有snippet的部分。

目前,我收到下面的snippet.title

I'M GONNA CARRY HER!!! Fortnite With Karina!

我希望得到这个标题:

我要抱她!!!与卡琳娜的堡垒之夜!

【问题讨论】:

标签: javascript next.js youtube-data-api


【解决方案1】:

首先,请确认您从 API 获得的内容不是(引用您的话)特殊字符。

从技术上讲,这些字符序列是HTML character references,也称为HTML entities

您遇到的行为是 well-known issue of the API,据我所知没有其他解决方案,除了您自己必须用这些 HTML 实体替换它们所代表的实际字符。

现在,我建议不要使用 临时解决方案;也就是说,我确实建议您使用编写良好且经过良好测试的知名库,这些库从精心实现的符合当前 HTML 标准的代码中派生出重要的解决方案。

在我看来,Mathias Bynens' 库显然是一个满足我上面提到的每个标准的工具:

he

he(用于“HTML 实体”)是用 JavaScript 编写的强大的 HTML 实体编码器/解码器。它支持all standardized named character references as per HTML,处理ambiguous ampersands 和其他极端情况just like a browser would,具有广泛的测试套件,并且——与许多其他JavaScript 解决方案相反——he 可以很好地处理星体Unicode 符号。 An online demo is available.

【讨论】:

    【解决方案2】:

    我正在使用escape-goat,因为它可以作为独立函数或tagged template literal 运行,具体取决于您的用例:

    const {htmlUnescape} = require('escape-goat');
    
    htmlUnescape("I'M GONNA CARRY HER!!! Fortnite With Karina!");
    //=> 'I'm gonna carry her!!! Fortnite With Karina!'
    
    htmlUnescape`Title: ${"I'M GONNA CARRY HER!!! Fortnite With Karina!"}`;
    //=> 'Title: I'm gonna carry her!!! Fortnite With Karina!'
    

    在处理 html 编码/解码时,请始终警惕潜在的XSS exploitation

    【讨论】:

      【解决方案3】:

      如果您想使用原始 JS 而不是导入库,我在旅行中看到了一些适用于您提出的简单用例的东西。它基本上是去除分隔符以获得表示 Unicode-16 字符的整数。 fromCharCode 查找该整数并返回与您提供的整数匹配的字符。

      const unescape = (str) => {
        return str.replace(/&#(\d+);/g, (match, dec) => String.fromCharCode(dec))
      }
      

      正如 Matt Hosch 在他的回答中提到的,您需要清理收到的任何数据以防止 XSS。

      【讨论】:

        猜你喜欢
        • 2017-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-25
        • 2015-06-01
        • 1970-01-01
        • 2015-07-24
        • 2017-10-14
        相关资源
        最近更新 更多