我有一个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& amp;& amp; 1);< / script>


&#xA ; 所需的输出:


 < script> console.log(1&& 1);< / script>



 如何使用未转义的实体获得所需的输出?


正确答案必须考虑到这种情况发生在生成各种HTML元素的生成器中,而不仅仅是< script>
,并生成正确的XHTML。 (这就是为什么我首先使用 saveXML
而不是 saveHTML
。)如果答案导致生成器失败或错误产生其他HTML元素,那么这不是正确的答案
答案 0 :(得分:2)
$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]);
在XML中,&
标记实体。
答案 1 :(得分:0)
使用change saveXML来保存HTML
echo $document->saveHTML($document->childNodes[0]);