DOMDocument оборачивает в блок при сохранении
$html = 'text';
($dom = new DOMDocument)->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'), LIBXML_NOWARNING|LIBXML_NOERROR|LIBXML_HTML_NOIMPLIED|LIBXML_HTML_NODEFDTD);
echo "<textarea>".$dom->saveHTML()."</textarea>";
Почему при сохранении, содержимое оборачивается в блок <p> и как этого избежать?
Ответы (1 шт):
Автор решения: pgood
→ Ссылка
Предлагаю, сделать сначала проверку, есть ли оборачивающий тег в исходной строке, и в зависимости от этого сохранять HTML целиком или брать только внутреннюю часть корневого тега. Для этого сделаем функцию DOMInnerHTML
<?php
$html = 'text';
function DOMInnerHTML(DOMNode $element){
$innerHTML = '';
$children = $element->childNodes;
foreach ($children as $child)
$innerHTML .= $element->ownerDocument->saveHTML($child);
return $innerHTML;
}
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');
$hasRootTag = '<' === substr(trim($html), 0, 1);
($dom = new DOMDocument)->loadHTML($html,LIBXML_NOWARNING|LIBXML_NOERROR|LIBXML_HTML_NOIMPLIED|LIBXML_HTML_NODEFDTD);
echo "<textarea>",
$hasRootTag ? $dom->saveHTML() : DOMinnerHTML($dom->documentElement),
"</textarea>";