fix(sanitizer): add XHTML11 doc type to recognize nbsp entity, closes #3024 (#3043)

This commit is contained in:
Huang Xin
2026-01-23 17:49:06 +01:00
committed by GitHub
parent 6c0f1b8b5f
commit 224acd68b1
@@ -1,5 +1,10 @@
import DOMPurify from 'dompurify';
import type { Transformer } from './types';
// import { diff } from '@/utils/diff';
const DOCTYPE_XHTML11 = `<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">`;
export const sanitizerTransformer: Transformer = {
name: 'sanitizer',
@@ -41,7 +46,7 @@ export const sanitizerTransformer: Transformer = {
const serializer = new XMLSerializer();
let serialized = serializer.serializeToString(sanitized);
serialized = serialized.replaceAll('&#160;', '&nbsp;').replaceAll('\u00A0', '&nbsp;');
serialized = '<?xml version="1.0" encoding="utf-8"?>' + serialized;
serialized = '<?xml version="1.0" encoding="utf-8"?>' + DOCTYPE_XHTML11 + serialized;
serialized = serialized.replace(/(<head[^>]*>)/i, '\n$1');
serialized = serialized.replace(/(<\/body>)(<\/html>)/i, '$1\n$2');