2010-04-29 74 views
2

为什么libxml2的报价这是我的代码:开始双斜线在CDATA使用JavaScript

<?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文档中,CDATA工件移除DOCTYPE符号正确和前导/尾随双斜杠不会变成CDATA。

这里有什么问题? libxml2中的错误? Linux上的PHP版本是5.2.13。谢谢。

+0

libxml2 2.6.32,PHP 5.3.0,Ubuntu 9.04,我看到了正确的输出。我检查了libxml2的错误数据库,并找不到与此描述相匹配的任何错误。您可能希望自己查看,并在需要时提交错误报告。首先,您必须验证它实际上是libxml2的错误。不要排除这是PHP的东西。 – erisco 2010-04-29 08:10:19

+0

无法在PHP 5.3/libxml上重现2.7.7 – 2010-04-29 08:54:55

+0

0

您应该使用API​​的HTML版本。
改为使用loadHTMLsaveHTML