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>";
→ Ссылка