From cfe51d01eefda4de18a294fe076bb0dbc05668e5 Mon Sep 17 00:00:00 2001 From: Huang Xin Date: Fri, 9 Jan 2026 09:30:04 +0100 Subject: [PATCH] fix(sanitizer): normalize non-breaking spaces for WebView compatibility (#2893) Convert   to   before sanitization and restore after XMLSerializer serialization. This handles the platform difference where XMLSerializer produces different representations of non-breaking spaces ( ,  , or \u00A0) across different WebView implementations. --- apps/readest-app/src/services/transformers/sanitizer.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/readest-app/src/services/transformers/sanitizer.ts b/apps/readest-app/src/services/transformers/sanitizer.ts index 08e2ea40..9498c044 100644 --- a/apps/readest-app/src/services/transformers/sanitizer.ts +++ b/apps/readest-app/src/services/transformers/sanitizer.ts @@ -8,7 +8,7 @@ export const sanitizerTransformer: Transformer = { const allowScript = ctx.viewSettings.allowScript; if (allowScript) return ctx.content; - const result = ctx.content; + const result = ctx.content.replaceAll(' ', ' '); const sanitized = DOMPurify.sanitize(result, { WHOLE_DOCUMENT: true, @@ -40,6 +40,7 @@ export const sanitizerTransformer: Transformer = { const serializer = new XMLSerializer(); let serialized = serializer.serializeToString(sanitized); + serialized = serialized.replaceAll(' ', ' ').replaceAll('\u00A0', ' '); serialized = '' + serialized; serialized = serialized.replace(/(]*>)/i, '\n$1'); serialized = serialized.replace(/(<\/body>)(<\/html>)/i, '$1\n$2');