Подтвердить что ты не робот

Как получить html внутри $node, а не только $nodeValue

Описание текущей ситуации:

У меня есть папка, полная страниц (папка-папка), каждая страница внутри этой папки имеет (помимо прочего) div с id="short-info".
У меня есть код, который вытаскивает все <div id="short-info">...</div> из этой папки и отображает текст внутри него с помощью textContent (который для этой цели такой же, как nodeValue)

Код, который загружает divs:

<?php
$filename = glob("pages-folder/*.php");
sort($filename);
foreach ($filename as $filenamein) {
    $doc = new DOMDocument();
    $doc->loadHTMLFile($filenamein);
    $xpath = new DOMXpath($doc);
    $elements = $xpath->query("*//div[@id='short-info']");

        foreach ($elements as $element) {
            $nodes = $element->childNodes;
            foreach ($nodes as $node) {
                echo $node->textContent;
            }
        }
}
?>

Теперь проблема заключается в том, что если страница, которую я загружаю, имеет дочерний элемент, например изображение: <div id="short-info"> <img src="picture.jpg"> Hello world </div>, вывод будет только Hello world, а не изображение, а затем Hello мир.

Вопрос:

Как сделать код отображающим полный html внутри div id = "short-info", включая, например, этот образ, а не только текст?

4b9b3361

Ответ 1

Вы должны сделать недокументированный вызов на node.

$node->c14n() Дает вам HTML-код, содержащийся в $node.

Сумасшедшая правда? Я потерял волосы над этим.

http://php.net/manual/en/class.domnode.php#88441

Update

Это изменит html, чтобы соответствовать строгому HTML. Лучше использовать

$html = $Node->ownerDocument->saveHTML( $Node );

Вместо.

Ответ 2

Вы хотите, чтобы сумма составляла 'innerHTML', которую PHP dom не поддерживает напрямую. Один из них - здесь в документах PHP.

Другой вариант - взять найденный $node, вставить его как элемент верхнего уровня нового документа DOM, а затем вызвать saveHTML() в этом новом документе.