Использование флага опций LIBXML_NOWARNING не останавливает бред при загрузке html с помощью PHPDOMDocument-> loadHTML. Другие константы работают, хотя.
В приведенном ниже примере я добавляю LIBXML_HTML_NODEFDTD, чтобы доказать, что константы получены (останавливает добавление типа документа).
$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 # 74004 LIBXML_NOWARNING
флаг встроен в loadHTML *.
Однако вы можете самостоятельно управлять обработкой ошибок, пока недостаток не будет устранен:
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);
Других решений пока нет …