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

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

Тем не менее, предупреждения по-прежнему генерируются и выводятся. Что мне не хватает?

5

Решение

Что LIBXML_NOWARNING вариант игнорируется DOMDocument::loadHTML() это недостаток в PHP (и должен быть исправлен). Это было недавно воспитано в связанный вопрос «libxml htmlParseDocument игнорируя флаги htmlParseOption» и подан как Ошибка PHP # 74004 LIBXML_NOWARNING флаг встроен в loadHTML *.

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

  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);

Обновить

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

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]