diff --git a/src/ApiKernel.php b/src/ApiKernel.php index 40a0346..1958035 100644 --- a/src/ApiKernel.php +++ b/src/ApiKernel.php @@ -970,12 +970,7 @@ class ApiKernel $node->removeChild($node->firstChild); } - $fragment = $doc->createDocumentFragment(); - if (@$fragment->appendXML($replacement)) { - $node->appendChild($fragment); - } else { - $node->appendChild($doc->createTextNode($replacement)); - } + $this->appendHtmlToNode($doc, $node, $replacement); } } @@ -988,4 +983,44 @@ class ApiKernel } return $output; } + + private function appendHtmlToNode(DOMDocument $targetDoc, DOMElement $node, string $html): void + { + if (trim($html) === '') return; + + $flags = 0; + if (defined('LIBXML_HTML_NOIMPLIED')) { + $flags |= LIBXML_HTML_NOIMPLIED; + } + if (defined('LIBXML_HTML_NODEFDTD')) { + $flags |= LIBXML_HTML_NODEFDTD; + } + + $fragmentDoc = new DOMDocument('1.0', 'UTF-8'); + libxml_use_internal_errors(true); + $wrapped = '