PHP nodeValue tiras tags html – innerHTML alternativa?

Estou usando o seguinte script para um editor leve de DOM. No entanto, nodeValue no meu loop for é converter minhas tags html para texto simples. O que é uma alternativa PHP para nodeValue que manteria meu innerHTML?

 $page = $_POST['page']; $json = $_POST['json']; $doc = new DOMDocument(); $doc = DOMDocument::loadHTMLFile($page); $xpath = new DOMXPath($doc); $entries = $xpath->query('//*[@class="editable"]'); $edits = json_decode($json, true); $num_edits = count($edits); for($i=0; $iitem($i)->nodeValue = $edits[$i]; // nodeValue strips html tags } $doc->saveHTMLFile($page); 

Desde $edits[$i] é uma string, você precisa analisá-la em uma estrutura DOM e replace o conteúdo original pela nova estrutura.

Atualizar

O fragment de código abaixo faz um trabalho incrível ao usar HTML compatível com XML. ( por exemplo, HTML 4/5)

 for($i=0; $i<$num_edits; $i++) { $f = new DOMDocument(); $edit = mb_convert_encoding($edits[$i], 'HTML-ENTITIES', "UTF-8"); $f->loadHTML($edit); $node = $f->documentElement->firstChild; $entries->item($i)->nodeValue = ""; foreach($node->childNodes as $child) { $entries->item($i)->appendChild($doc->importNode($child, true)); } } 

Eu não tenho trabalhado com essa biblioteca em PHP antes, mas na minha outra experiência de xpath acho que o nodeValue em qualquer outra coisa que não seja um nó de texto tira tags. Se você não tem certeza sobre o que está por baixo desse nó, então acho que você precisará descer recursivamente $ inputs-> item ($ i) -> childNodes se precisar fazer a marcação de volta.

Ou … você pode include qualquer código de texto em vez de nodeValue: http://us.php.net/manual/en/class.domnode.php#domnode.props.textcontent