PHP DOMDocument для удаления HTML-тегов

Я работаю над небольшим шаблоном шаблонов, и я использую DOMDocument для анализа страниц. Моя тестовая страница выглядит так:

<block name="content"> <?php echo 'this is some rendered PHP! <br />' ?> <p>Main column of <span>content</span></p> </block> 

И часть моего класса выглядит так:

 private function parse($tag, $attr = 'name') { $strict = 0; /*** the array to return ***/ $out = array(); if($this->totalBlocks() > 0) { /*** a new dom object ***/ $dom = new domDocument; /*** discard white space ***/ $dom->preserveWhiteSpace = false; /*** load the html into the object ***/ if($strict==1) { $dom->loadXML($this->file_contents); } else { $dom->loadHTML($this->file_contents); } /*** the tag by its tag name ***/ $content = $dom->getElementsByTagname($tag); $i = 0; foreach ($content as $item) { /*** add node value to the out array ***/ $out[$i]['name'] = $item->getAttribute($attr); $out[$i]['value'] = $item->nodeValue; $i++; } } return $out; } 

У меня он работает так, как я хочу, чтобы он захватывал каждый <блок> на странице и вводил его содержимое в мой шаблон, однако он лишает HTML-теги в <block>, тем самым возвращая следующее без <p> или <span>:

 this is some rendered PHP! Main column of content 

Что я здесь делаю неправильно? 🙂 Благодаря

Solutions Collecting From Web of "PHP DOMDocument для удаления HTML-тегов"

Nothing: nodeValue – это конкатенация части значения дерева и никогда не будет иметь тегов.

Что я сделал бы, чтобы сделать HTML-фрагмент дерева в $ node, это:

 $doc = new DOMDocument(); foreach($node->childNodes as $child) { $doc->appendChild($doc->importNode($child, true)); } return $doc->saveHTML(); 

HTML-фрагменты на самом деле более проблематичны, чем вы думаете вначале, потому что они, как правило, не имеют таких вещей, как доктрисы и наборы символов, что затрудняет детерминистский переход между частями дерева DOM и фрагментов HTML.