Skip to content

Nuxt Fatal Error. Error: Invalid character in string #266

@kovan

Description

@kovan

Somehow the description of a <video> entry in the sitemap has weird characters which seem not to be in the range allowed by the XML specification.

Here is the stack trace:

at XMLStringifier.assertLegalChar (node_modules/xmlbuilder/lib/XMLStringifier.js:208:19)
at XMLStringifier.cdata (node_modules/xmlbuilder/lib/XMLStringifier.js:61:21)
at new XMLCData (node_modules/xmlbuilder/lib/XMLCData.js:21:35)
at XMLElement.cdata (node_modules/xmlbuilder/lib/XMLNode.js:318:17)
at SitemapItem.buildVideoElement (node_modules/sitemap/dist/lib/sitemap-item.js:79:47)
at Array.forEach ()
at SitemapItem.buildXML (node_modules/sitemap/dist/lib/sitemap-item.js:173:28)
at Sitemap.toString (node_modules/sitemap/dist/lib/sitemap.js:280:62)
at Sitemap.toXML (node_modules/sitemap/dist/lib/sitemap.js:147:21)
at generateSitemap (node_modules/@nuxtjs/sitemap/lib/generator.js:58:42)
at async generateSitemaps (node_modules/@nuxtjs/sitemap/lib/generator.js:32:5)
at async Promise.all (index 0)
at async node_modules/@nuxtjs/sitemap/lib/module.js:44:5
at async Nuxt.callHook (node_modules/hable/dist/hable.js:1:959)
at async Generator.generate (node_modules/@nuxt/generator/dist/generator.js:91:5)
at async generate$1 (node_modules/@nuxt/cli/dist/cli-generate.js:46:22)

Weirdly , the error always ends says the conflicting character is at the last position of the string, tested with different strings. So I don't know which character is causing problems.

I have tried removing conflicting characters (using this code), but the error persists.

And this is the code that generates the entry, which has been working fine for quite a long time until this issue appeared.
Nothing really special about it I think:

function videoToSitemapEntry(video) {
    // Reference:
    // https://developers.google.com/search/docs/advanced/sitemaps/video-sitemaps
    let json = {
        url: `/video/${video.videosdb.slug}`,
        video: [
            {
                thumbnail_loc: video.snippet.thumbnails.medium.url,
                title: video.snippet.title,
                description: video.snippet.description
                    ? removeXMLInvalidChars(video.snippet.description, true).substring(0, 2040)
                    : video.snippet.title,
                duration: video.videosdb.durationSeconds,
                publication_date: dateToISO(video.snippet.publishedAt)
            },
        ],
        priority: 1.0,
    }
    return json
}

Help appreciated.

Thank you for your time.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions