2017-03-02 8 views
0

Wir verwenden ein CMS auf unserer Website. Viele Benutzer haben HTML-Inhalt in die Datenbank eingefügt, die seltsam formatiert ist. Wenn Sie beispielsweise den gesamten HTML-Code in eine Zeile schreiben:Wie kann ich den InnerText eines DOMEelements in PHP bekommen?

Dies wird im Browser natürlich korrekt dargestellt. Allerdings bin ich ein Skript in PHP zu schreiben, die diese Daten in eine DOMDocument lädt sich wie so:

$doc = new DOMDocument(); 
$doc->loadHTML($row['body_html']); 
var_dump($doc->documentElement->textContent); 

Dies zeigt sich zum Beispiel:

This is my titleFirst paragraphSecond paragraph 

Wie kann ich documentElementinnerText zurückzukehren, anstatt textContent? Ich glaube, innerText wird eine Zeichenfolge mit Zeilenumbrüchen zurückgeben.

+1

Sie sollten über alle Elemente im DomDocument iterieren und den Text Element für Element abrufen und die Whitespaces manuell einfügen. Schauen Sie sich [hier] (http://stackoverflow.com/questions/191923/how-do-i-iterate-through-dom-elements-in-php) zum Beispiel an. DomDocument selbst kann nicht wissen, wo es liegen soll, sondern die Leerzeichen. – cb0

Antwort

0

Wie cb0 sagte:

Sie sollten alle Elemente in der DomDocument iterieren und die Text Stück für Stück erhalten und die Whitespaces manuell einfügen. Schauen Sie sich here zum Beispiel an. DomDocument selbst kann nicht wissen, wo es aber die Whitespaces sollte.

schrieb ich die folgende Funktion das DOMDocument Objekt rekursiv durchqueren:

function get_text_from_dom($node, $text) { 
    if (!is_null($node->childNodes)) { 
    foreach ($node->childNodes as $node) { 
     $text = get_text_from_dom($node, $text); 
    } 
    } 
    else { 
    return $text . $node->textContent . ' '; 
    } 
    return $text; 
} 

Und den Code in der Frage mit folgenden Fassung:

$doc = new DOMDocument(); 
$doc->loadHTML($row['body_html']); 
var_dump(get_text_from_dom($doc->documentElement)); 

Es ist herrlich.

Verwandte Themen