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