(PHP 5, PHP 7, PHP 8)
DOMDocument::loadHTML — Загрузка HTML из строки
Функция разбирает HTML, содержащийся в строке source
.
В отличие от загрузки XML, HTML не обязан быть правильно построен для загрузки.
Функция разбирает входные данные по стандарту HTML 4. Правила синтаксического анализа по стандарту HTML 5, с которым работают современные браузеры, содержат отличия. Итоговая структура DOM зависит от входных данных. Поэтому функцию нельзя использовать для безопасной очистки HTML-разметки.
Поведение при разборе HTML-разметки зависит от версии библиотеки
libxml
, это проявляется острее
при наступлении граничных условий и при обработке ошибок.
Разметку, которая соответствует спецификации HTML5, разбирают
методом Dom\HTMLDocument::createFromString()
или Dom\HTMLDocument::createFromFile(), которые добавили в PHP 8.4.
Например, отдельные HTML-элементы при встрече неявно закрывают родительский элемент. Правила автоматического закрытия родительских элементов в спецификациях HTML 4 и HTML 5 неодинаковые. Поэтому итоговая структура DOM, которую видит класс DOMDocument, отличается от DOM-структуры, которую видит браузер, что создаёт риск взлома итоговой HTML-разметки злоумышленником.
Функция возвращает true
в случае успешного выполнения или false
, если возникла ошибка.
Если через аргумент source
передана пустая
строка, будет сгенерировано предупреждение.
Это предупреждение генерируется не libxml, поэтому оно не может быть
обработано функциями обработки ошибок libxml.
Несмотря на то что некорректный HTML обычно успешно загружается, эта функция
может генерировать ошибки уровня E_WARNING
при обнаружении
плохой разметки. Для обработки этих ошибок можно использовать
функции обработки
ошибок libxml.
Версия | Описание |
---|---|
8.3.0 | Теперь функция имеет предварительный логический (bool) тип возвращаемого значения. |
8.0.0 |
При статическом вызове функции теперь будет выбрасываться ошибка Error.
Ранее выдавалась ошибка уровня E_DEPRECATED .
|
Пример #1 Создание документа
<?php
$doc = new DOMDocument();
$doc->loadHTML("<html><body>Test<br></body></html>");
echo $doc->saveHTML();
?>