2010-04-29 73 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