>我有一个HTML生成器,它使用DOM类来构建文档并生成HTML。我的目标是与HTML兼容的XHTML,如XHTML 1.0规范的附录C中所述。
这是一个产生<script>
元素的问题:
$document = new DOMDocument();
$element = $document->createElement('script');
$script = $document->createTextNode('console.log(1 && 1);');
$element->appendChild($script);
$document->appendChild($element);
echo $document->saveXML($document->childNodes[0]);
实际输出:
<script>console.log(1 && 1);</script>
期望输出:
<script>console.log(1 && 1);</script>
如何在未转义实体的情况下获得所需的输出?
正确答案必须考虑到这种情况发生在生成各种 HTML 元素的生成器中,而不仅仅是<script>
,并生成正确的 XHTML。(这就是为什么我首先使用saveXML
而不是saveHTML
。如果答案导致生成器失败或错误地生成其他 HTML 元素,则它不是正确答案。
不要saveXML
,使用saveHTML
。
$document = new DOMDocument();
$element = $document->createElement('script');
$script = $document->createTextNode('console.log(1 && 1);');
$element->appendChild($script);
$document->appendChild($element);
echo $document->saveHTML($document->childNodes[0]);
演示:https://3v4l.org/63H0L
在 XML 中,&
用于标记实体。
使用 change saveXML 来保存 HTML
echo $document->saveHTML($document->childNodes[0]);