如何解决 Gatsby.js 添加 RSS 报错问题?

November 23,2019
0
Gatsby、RSS

报错

error on line 2025 at column 11: PCDATA invalid Char value 8

原因

并非所有的 utf-8 有效字符都会被 XML 接受,因此在解析的过程中要将某些特殊字符移除。

解决方案

gatsby-plugin-feed 插件的 serialize 方法替换为以下方法:

// gatsby-config.js
serialize: ({ query: { site, allMarkdownRemark } }) => {
  return allMarkdownRemark.edges.map((edge) => {
    return Object.assign({}, edge.node.frontmatter, {
      description: edge.node.frontmatter.tldr,
      date: edge.node.frontmatter.date,
      url: site.siteMetadata.siteUrl + edge.node.fields.slug,
      guid: site.siteMetadata.siteUrl + edge.node.fields.slug,
      custom_elements: [
        {
          'content:encoded': edge.node.html.replace(
            /[^\x09\x0A\x0D\x20-\xFF\x85\xA0-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/gm,
            ''
          ),
        },
      ],
    })
  })
}

其中,真正起作用的是这段正则替换:

html.replace(
  /[^\x09\x0A\x0D\x20-\xFF\x85\xA0-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/gm,
  ''
)

商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用 CC BY-NC-SA 4.0 - 非商业性使用 - 相同方式共享 4.0 国际进行许可。