PHP DomDocument在CLI和Web浏览器中的表现不同

时间:2011-03-14 06:35:29

标签: domdocument php

我正在使用以下代码:

$doc = new DOMDocument();
$doc->loadHTML("<i><p><strong>From: fsong | #001</strong><br/>I hate you DomDocument :(.</p></i><br/>you'd be surprised<br/>");
echo $doc->saveHTML();

在CLI中运行它让我

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<i><p><strong>From: fsong | #001</strong><br>I hate you DomDocument :(.</p></i><br>you'd be surprised<br>
</body></html>

通过Web浏览器运行时返回:

Warning: DOMDocument::loadHTML(): Unexpected end tag : i in Entity, line: 1 in /home/xx/www/test/topic_archiver_test.php on line 50
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html><body> 
<i></i><p><strong>From: fsong | #001</strong><br>I hate you DomDocument :(.</p> 
<br>you'd be surprised<br> 
</body></html> 

现在我意识到在(i)标签内嵌入(p)标签会破坏HTML规则,但我不是负责HTML的人。出于某种原因,CLI模式会返回与原始文档类似的文档,而网页版本会提前关闭(i)标记以保持HTML格式良好。

我的php.ini配置中是否有导致行为差异的内容?我检查了官方文档(http://www.php.net/manual/en/dom.configuration.php),似乎没有任何配置文件或DomDocument的设置。

2 个答案:

答案 0 :(得分:1)

由于某种原因,它似乎试图验证HTML。运行php 5.3.5和libxml 2.7.6时没有任何错误。

忽略警告的一种方法是在“@”字符前加上,当然这是一种黑客行为。

@$dom->saveHTML();

答案 1 :(得分:1)

您可以尝试从strictErrorChecking

关闭DOMDocument