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;
|
const allowScript = ctx.viewSettings.allowScript;
|
||||||
if (allowScript) return ctx.content;
|
if (allowScript) return ctx.content;
|
||||||
|
|
||||||
const result = ctx.content;
|
const result = ctx.content.replaceAll(' ', ' ');
|
||||||
|
|
||||||
const sanitized = DOMPurify.sanitize(result, {
|
const sanitized = DOMPurify.sanitize(result, {
|
||||||
WHOLE_DOCUMENT: true,
|
WHOLE_DOCUMENT: true,
|
||||||
@@ -40,6 +40,7 @@ export const sanitizerTransformer: Transformer = {
|
|||||||
|
|
||||||
const serializer = new XMLSerializer();
|
const serializer = new XMLSerializer();
|
||||||
let serialized = serializer.serializeToString(sanitized);
|
let serialized = serializer.serializeToString(sanitized);
|
||||||
|
serialized = serialized.replaceAll(' ', ' ').replaceAll('\u00A0', ' ');
|
||||||
serialized = '<?xml version="1.0" encoding="utf-8"?>' + serialized;
|
serialized = '<?xml version="1.0" encoding="utf-8"?>' + serialized;
|
||||||
serialized = serialized.replace(/(<head[^>]*>)/i, '\n$1');
|
serialized = serialized.replace(/(<head[^>]*>)/i, '\n$1');
|
||||||
serialized = serialized.replace(/(<\/body>)(<\/html>)/i, '$1\n$2');
|
serialized = serialized.replace(/(<\/body>)(<\/html>)/i, '$1\n$2');
|
||||||
|
|||||||
Reference in New Issue
Block a user