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。謝謝。
libxml2 2.6.32,PHP 5.3.0,Ubuntu 9.04,我看到了正確的輸出。我檢查了libxml2的錯誤數據庫,並找不到與此描述相匹配的任何錯誤。您可能希望自己查看,並在需要時提交錯誤報告。首先,您必須驗證它實際上是libxml2的錯誤。不要排除這是PHP的東西。 – erisco 2010-04-29 08:10:19
無法在PHP 5.3/libxml上重現2.7.7 – 2010-04-29 08:54:55
您應該使用API的HTML版本。
改爲使用
loadHTML
和saveHTML
。來源
2013-01-01 08:27:22