From 3c888d3914da3379dee86159d747071825cf772d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20S=C3=A1nchez?= Date: Wed, 25 Jan 2023 14:12:55 +0100 Subject: [PATCH] fix: unescape html entities in page title (#1392) --- composables/setups.ts | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/composables/setups.ts b/composables/setups.ts index 90b12a22..06d48c72 100644 --- a/composables/setups.ts +++ b/composables/setups.ts @@ -17,10 +17,30 @@ export function setupPageHeader() { dir: () => localeMap[locale.value] ?? 'auto', }, titleTemplate: (title) => { - let titleTemplate = title ? `${title} | ` : '' - titleTemplate += t('app_name') + let titleTemplate = title ?? '' + + if (titleTemplate.match(/&[a-z0-9#]+;/gi)) { + titleTemplate = unescapeTitleTemplate(titleTemplate, [ + ['"', ['"', '"']], + ['&', ['&', '&']], + ['\'', [''', ''']], + ['\u003C', ['<', '<']], + ['\u003E', ['>', '>']], + ]) + if (titleTemplate.length > 60) + titleTemplate = `${titleTemplate.slice(0, 60)}...${titleTemplate.endsWith('"') ? '"' : ''}` + + if (!titleTemplate.includes('"')) + titleTemplate = `"${titleTemplate}"` + } + else if (titleTemplate.length > 60) { + titleTemplate = `${titleTemplate.slice(0, 60)}...${titleTemplate.endsWith('"') ? '"' : ''}` + } + + titleTemplate += ` | ${t('app_name')}` if (buildInfo.env !== 'release') titleTemplate += ` (${buildInfo.env})` + return titleTemplate }, link: process.client && useRuntimeConfig().public.pwaEnabled @@ -32,3 +52,12 @@ export function setupPageHeader() { : [], }) } + +function unescapeTitleTemplate(titleTemplate: string, replacements: [string, string[]][]) { + let result = titleTemplate + for (const [replacement, entities] of replacements) { + for (const e of entities) + result = result.replaceAll(e, replacement) + } + return result.trim() +}