PHP DomDocument ведет себя по-разному в CLI и веб-браузере - PullRequest
3 голосов
/ 14 марта 2011

Я использую следующий код:

$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>

при запуске через веб-браузер возвращает:

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> 

Теперь я понимаю, что вложение тега (p) в тег (i) нарушает правила HTML, но я не являюсь ответственным за HTML.По какой-то причине режим CLI возвращает документ так же, как и оригинал, в то время как версия веб-страницы закрывает тег (i) раньше, чтобы поддерживать HTML в правильном состоянии.

Есть ли в моих конфигурациях php.ini что-то, что вызываетразница в поведении?Я проверил официальные документы (http://www.php.net/manual/en/dom.configuration.php)) и, похоже, нет никаких файлов конфигурации или настроек для DomDocument.

Ответы [ 2 ]

1 голос
/ 14 марта 2011

Вы можете попробовать отключить strictErrorChecking из DOMDocument

1 голос
/ 14 марта 2011

Похоже, по какой-то причине он пытается проверить HTML. Я не получаю никаких ошибок при запуске php 5.3.5 и libxml 2.7.6.

Одним из способов игнорирования предупреждения является добавление символа '@', конечно, это своего рода взлом.

@$dom->saveHTML();
...