forked from akai/readest
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.
This commit is contained in:
@@ -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 = '<?xml version="1.0" encoding="utf-8"?>' + serialized;
|
||||
serialized = serialized.replace(/(<head[^>]*>)/i, '\n$1');
|
||||
serialized = serialized.replace(/(<\/body>)(<\/html>)/i, '$1\n$2');
|
||||
|
||||
Reference in New Issue
Block a user