Чтобы скрыть предупреждения, вы должны дать специальные инструкции libxml
, который используется внутренне, чтобы выполнить синтаксический анализ:
libxml_use_internal_errors(true);
$dom->loadHTML($html);
libxml_clear_errors();
libxml_use_internal_errors(true)
означает, что вы собираетесь обрабатывать ошибки и предупреждения себя и вас не хотят, чтобы они испортили вывод вашего скрипта.
Это не то же самое, что и оператор @
. Предупреждения собираются за кулисами, а затем вы можете их восстановить, используя libxml_get_errors()
, если вы хотите выполнить регистрацию или вернуть список проблем вызывающему.
Независимо от того, используете ли вы собранные предупреждения, вы всегда должны очищать очередь, вызывая libxml_clear_errors()
.
Сохраняя состояние
Если у вас есть другой код, который использует libxml
это может быть полезным, чтобы убедиться, что ваш код не изменяет глобального состояния обработки ошибок; для этого вы можете использовать возвращаемое значение libxml_use_internal_errors()
для сохранения предыдущего состояния.
// modify state
$libxml_previous_state = libxml_use_internal_errors(true);
// parse
$dom->loadHTML($html);
// handle errors
libxml_clear_errors();
// restore
libxml_use_internal_errors($libxml_previous_state);
Попробуйте это решение - кажется, гораздо проще - http://stackoverflow.com/questions/6090667/php-domdocument-errors-warnings-on-html5-tags – Marcin
Преобразования паршивого входа в правильный выход, что оплачивает счета;) [вариант восстановления находится в руководстве] (http://nl1.php.net/manual/en/class.domdocument.php#domdocument.props.recover). это просто логическое значение. Вы можете просто вызвать '$ dom-> saveHTML()', чтобы посмотреть, какой тип, если document libxml пытается сделать ваш вход '$ html', обычно он довольно близок/ok. – Wrikken