2009-07-11 6 views
6

Ich habe ein div id von einem Ausgang entfernen möchten, die wieWie kann ich ein HTML-Element zu entfernen und seinen Inhalt RegEx mit

<div id="ithis" class="cthis">Content here which includes other elements etc..) </div> 

schaut Wie kann ich dieses div und alles in ihm entfernen PHP und regex ?

Vielen Dank.

+0

Können Sie weiter ausführen? Ist das in Form einer Schnur? –

+1

Kennen Sie den ID-Namen und/oder Klassennamen? Oder gibt es eindeutige IDs der ID und/oder Klasse, so dass Sie nicht alle Divs entfernen, die in diese Beschreibung fallen? Oder möchtest du alle Divs und deren Inhalt entfernen? –

Antwort

13

Die einfache Antwort ist, dass Sie nicht. Sie verwenden stattdessen einen der vielen HTML-Parser von PHP. Regexes sind ein flockiger und fehleranfälliger Weg HTML zu manipulieren.

Dass gesagt wird Sie können dies tun:

$html = preg_replace('!<div\s+id="ithis"\s+class="cthis">.*?</div>!is', '', $html); 

Aber viele Dinge können falsch mit diesem. Zum Beispiel, wenn das enthält ein div:

<div id="ithis" class="cthis">Content here which <div>includes</div> other elements etc..) </div> 

Sie am Ende folgendes haben:

other elements etc..) </div> 

als regex beim ersten </div> stoppt. Und nein, es gibt nichts, was Sie tun können, um dieses Problem (mit regulären Ausdrücken) konsequent zu lösen.

mit einem Parser Fertig es wie folgt aussieht:

$doc = new DOMDocument(); 
$doc->loadHTML($html); 
$element = $doc->getElementById('ithis'); 
$element->parentNode->removeChild($element); 
$html = $doc->saveHTML(); 
+0

+1. Es lohnt sich zu kommentieren, dass (A) wenn das Element nicht existiert, '$ element'' NULL' ist und der '-> removeChild()' Befehl mit einem fatalen Fehler fehlschlägt, und (B) Sie können/wollen um '' 'zu benutzen, um' 'loadHTML()' zu veranlassen, irgendwelche Mitteilungen über falsch gebildetes HTML zum Schweigen zu bringen: '@ $ doc-> loadHTML ($ html);' –

1

ich über PHP weiß es nicht, aber man kann /<id.*?<\/id[^>]*>/ mit nichts ersetzen.

0

PHP ist Server-Seite, und die Ausgabe kommt vom Server. Kannst du es nicht einfach ausgeben? Oder versuchst du es zu verstecken? Wenn ja, sagen Sie in einem Stylesheet einfach #ithis {display:none}.

Wenn die Zeichenfolge eine Rückkehr von einer Funktion in PHP ist, die Sie nicht geschrieben haben UND Sie nicht mit diesem Code Muck, müssen Sie eine sehr schwierige Regex für verschachtelte divs Rechnung zu schreiben, variierende Syntax in die Ausgabe usw. Ich würde empfehlen, einen Parser zu verwenden (vielleicht diese Zend Framework component), um Ihnen zu helfen. Ich habe es ein paar Mal für etwas ähnliches verwendet. Wenn Sie mit ZF überhaupt nicht vertraut sind, möchten Sie vielleicht etwas anderes ausprobieren.