Использование флажка LIBXML_NOWARNING не останавливает wanrings при загрузке html с помощью PHPDOMDocument-> loadHTML. Другие константы действительно работают.
В приведенном ниже примере я добавляю LIBXML_HTML_NODEFDTD, чтобы доказать, что константы получены (останавливает добавление doctype).
$doc=new DOMDocument(); $doc->loadHTML("<tagthatdoesnotexist><h1>Hi</h1></tagthatdoesnotexist>",LIBXML_NOERROR | LIBXML_NOWARNING | LIBXML_HTML_NODEFDTD); echo $doc->saveHTML();
Однако предупреждения все еще генерируются и выводятся. Что мне не хватает?
То, что параметр LIBXML_NOWARNING
игнорируется с помощью DOMDocument::loadHTML()
является недостатком PHP (и для исправления). Недавно был затронут связанный с ним вопрос «libxml htmlParseDocument, игнорирующий флаги htmlParseOption» и зарегистрированный как PHP-ошибка # LIBXML_NOWARNING
Флаг LIBXML_NOWARNING, выполняемый при загрузкеHTML * .
Тем не менее вы можете управлять обработкой ошибок самостоятельно до устранения ошибки:
libxml_use_internal_errors(true)
перед вызовом DOMDocument::loadHTML
. Это предотвратит появление ошибок до вашего обработчика ошибок по умолчанию. И вы можете получить их (если хотите), используя другие функции ошибок libxml (например, libxml_get_errors()
). libxml_use_internal_errors()
. Пример кода:
$doc = new DOMDocument(); # clear errors list if any libxml_clear_errors(); # use internal errors, don't spill out warnings $previous = libxml_use_internal_errors(true); $doc->loadHTML("<tagthatdoesnotexist><h1>Hi</h1></tagthatdoesnotexist>"); echo $doc->saveHTML(); # clear errors list if any libxml_clear_errors(); # restore previous behavior libxml_use_internal_errors($previous);
Эта ошибка исправлена .