Метод loadHTML класса DOMDocument в PHP

Материал из Энциклопедия о программировании
Перейти к: навигация, поиск

Метод loadHTML класса DOMDocument в PHP производит загрузку HTML из строки.

Особенности

Вся переданная строка заключается в тег абзаца p, если она не начинается с парного тега, – в этом случ. весь найденный обычный текст заключается в тег абзаца p; т.о., если переданная строка будет начинаться с парного тега и далее будет следовать обычный текст, то этот обычный текст будет помещён в тег абзаца p, а закрывающий тег начального парного тега будет помещён в конец строки, что довольно неожиданно, ведь меняется содержимое имеющихся тегов. В др. случ. такого не происходит – напр., если перед начальным парным тегом будет ещё один обычный текст, то также вся переданная строка заключается в тег абзаца p. Чтобы всего этого избежать, необходимо всю передаваемую строку предварительно заключить в парные теги абзаца p, или не задавать опцию LIBXML_HTML_NOIMPLIED, без которой строка будет помещена в обязательные парные HTML теги html и body. В общем, без оборачивания строки никак.

Примеры

Классическое использование метода для отдельных строк: $doc = new DOMDocument('1.0', UTF-8); $doc->loadHTML('<p>test</p>', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); echo str_replace(['<p>', '</p>'], NULL, $doc->saveHTML()); Если передаётся строка, а не полноценный HTML документ, и задаётся опция LIBXML_HTML_NOIMPLIED (не добавлять HTML теги html и body), то строку обязательно надо поместить в тег абзаца p, чтобы предотвратить любое неожиданное поведение метода, а потом эти теги убирать.

Или так: $doc = new DOMDocument('1.0', UTF-8); $doc->loadHTML('test', LIBXML_HTML_NODEFDTD); echo str_replace(['<html>', '<body>', '</body>', '</html>'], NULL, $doc->saveHTML()); Тогда нужно будет убирать HTML теги html и body.