PHP:使用DOM类构建<script>元素

时间:2018-04-20 13:08:00

标签: php entity domdocument

我有一个HTML生成器,它使用DOM类来构建文档并生成HTML。我的目标是HTML兼容的XHTML,如XHTML 1.0规范的附录C中所述。

&#xA;&#xA;

生成&lt; script&gt; 元素时遇到问题:

&#xA;&#xA;
  $ document = new \ DOMDocument();&#xA; $ element = $ document-&gt; createElement('script');&#xA; $ script = $ document-&gt; createTextNode('console.log(1&amp; ;&amp; 1);');&#xA; $ element-&gt; appendChild($ script);&#xA; $ document-&gt; appendChild($ element);&#xA; echo $ document-&gt; saveXML ($ document-&gt; childNodes [0]);&#xA;  
&#xA;&#xA;

实际输出:

&#xA;&#xA;
 &lt; script&gt; console.log(1&amp; amp;&amp; amp; 1);&lt; / script&gt;&#xA;  
&#xA;&#xA ;

所需的输出:

&#xA;&#xA;
 &lt; script&gt; console.log(1&amp;&amp; 1);&lt; / script&gt;&#xA;  
&#xA;&#xA;

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

&#xA;&#xA;

正确答案必须考虑到这种情况发生在生成各种HTML元素的生成器中,而不仅仅是&lt; script&gt; ,并生成正确的XHTML。 (这就是为什么我首先使用 saveXML 而不是 saveHTML 。)如果答案导致生成器失败或错误产生其他HTML元素,那么这不是正确的答案

&#XA;

2 个答案:

答案 0 :(得分:2)

不要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中,&标记实体。

答案 1 :(得分:0)

使用change saveXML来保存HTML

echo $document->saveHTML($document->childNodes[0]);