2010-12-08 15 views
2

Ich versuche, etwas HTML mit PHP als Übung zu analysieren, es als nur Text auszugeben, und ich habe einen Haken gefunden. Ich möchte alle Tags entfernen, die mit style="display: none;" ausgeblendet sind - unter Berücksichtigung, dass das Tag andere Attribute und Stileigenschaften enthalten kann.Regex zum selektiven Entfernen von HTML

Der Code, den ich bisher habe, ist dies:

$page = preg_replace("#<([a-z]+).*?style=\".*?display:\s*none[^>]*>.*?</\1>#s","",$page);` 

Der Code es NULL mit einem PREG_BACKTRACK_LIMIT_ERROR zurück.
habe ich versucht, diese stattdessen:

$page = preg_replace("#<([a-z]+)[^>]*?style=\"[^\"]*?display:\s*none[^>]*>.*?</\1>#s","",$page); 

Aber jetzt ist es nur noch keine Tags zu ersetzen.

Jede Hilfe würde sehr geschätzt werden. Vielen Dank!

+3

einfach. Nicht. http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

+0

möglich Duplikat von [Wie zu analysieren und zu verarbeiten HTML mit PHP?] (http : //stackoverflow.com/questions/3577641/how-to-parse-and-process-html-with-php) – PeeHaa

Antwort

2

Mit DOMDocument, können Sie so etwas wie dies versuchen:

$doc = new DOMDocument; 
$doc->loadHTMLFile("foo.html"); 
$nodeList = $doc->getElementsByTagName('*'); 
foreach($nodeList as $node) { 
    if(strpos(strtolower($node->getAttribute('style')), 'display: none') !== false) { 
     $doc->removeChild($node); 
    } 
} 
$doc->saveHTMLFile("foo.html"); 
+0

Danke - für tatsächlich eine Antwort zu geben: p –

+0

@Kolink - ich habe gerade bearbeitet, machte es ein bisschen robuster durch die Einbeziehung von 'strpos', um es bei zusätzlichen Stilelementen funktionsfähig zu machen, aber es gibt noch viele mögliche Verbesserungen. Beispielsweise das Trimmen des Attributs mit "trim" und das Testen auf "display: none" (kein Leerzeichen). – karim79

+0

Ich gab dir eine Antwort. Aber eben nicht die ganze Lösung. –

2

Sie sollten nie HTML mit Regex analysieren. Das lässt deine Augen bluten. HTML ist nicht regulär in irgendeiner Form. Es sollte mit einem DOM-Parser geparst werden.

Parse HTML to DOM with PHP

Verwandte Themen