这是我的代码:
<?php
$data = <<<EOL
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<script type="text/javascript">
//<![CDATA[
var a = 123; // JS code
//]]>
</script>
</html>
EOL;
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->formatOutput = false;
$dom->loadXml($data);
echo '<pre>' . htmlspecialchars($dom->saveXML()) . '</pre>';
结果是:
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<script type="text/javascript"><![CDATA[
//]]><![CDATA[
var a = 123; // JS code
//]]><![CDATA[
]]></script></html>
如果当我从XML文档中删除DOCTYPE
表示法时,CDATA正常工作,并且前导/尾随双斜杠不会变为CDATA。
这是什么问题? libxml2中的错误? Linux上的PHP版本是5.2.13。感谢。
答案 0 :(得分:1)
我在OS X上运行带有PHP 5.2.11的libxml 2.7.3。
不是苹果与苹果的比较,但也许它会帮助你。
当我运行你的代码时(在这里添加结束的PHP标记是我的输出。)
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><script type="text/javascript">
//<![CDATA[
var a = 123; // JS code
//]]>
</script></html>
它似乎可以根据您的需要正确渲染。也许版本号会帮你排序......我正在运行一个旧版本的PHP5(Mamp顺便说一下,所以我没有自己编译。)
希望这有助于指明您找到答案的方向。
小心!
答案 1 :(得分:0)
您应该使用API的HTML版本
请改用loadHTML
和saveHTML
。