PHP LIBXML_NOWARNING не подавляет предупреждения?

Использование флажка 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(); 

Однако предупреждения все еще генерируются и выводятся. Что мне не хватает?

Solutions Collecting From Web of "PHP LIBXML_NOWARNING не подавляет предупреждения?"

То, что параметр LIBXML_NOWARNING игнорируется с помощью DOMDocument::loadHTML() является недостатком PHP (и для исправления). Недавно был затронут связанный с ним вопрос «libxml htmlParseDocument, игнорирующий флаги htmlParseOption» и зарегистрированный как PHP-ошибка # LIBXML_NOWARNING Флаг LIBXML_NOWARNING, выполняемый при загрузкеHTML * .

Тем не менее вы можете управлять обработкой ошибок самостоятельно до устранения ошибки:

  1. Установите libxml_use_internal_errors(true) перед вызовом DOMDocument::loadHTML . Это предотвратит появление ошибок до вашего обработчика ошибок по умолчанию. И вы можете получить их (если хотите), используя другие функции ошибок libxml (например, libxml_get_errors() ).
  2. При использовании этой функции обязательно очистите внутренний буфер ошибок. Если вы этого не сделаете, и вы используете это в длительном процессе, вы можете обнаружить, что вся ваша память израсходована.
  3. Если вы хотите восстановить установленную по умолчанию функциональность 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); 

Обновить

Эта ошибка исправлена .