2010-12-19 13 views
0

Was ist der schnellste Weg, um leere HTML-Tags aus einer Zeichenfolge zu entfernen?Überprüfen und Entfernen von leeren Tags mit PHP

Ich habe so etwas wie dies programmiert zu leeren Anker-Tags zu erkennen:

     $temp = strip_tags($string, "<blockquote><a>"); 
         $cmatch = array(); 
         if(preg_match_all("~<a.*><\/a>~iU", $temp, $cmatch, PREG_SET_ORDER)) 
         { 
          foreach($cmatch as $cm) 
          { 
           foreach($cm as $t) //echo htmlentities($t)."<br />"; 
           $temp = trim(str_replace($t, '', $temp)); 
          } 
         } 

         if(!empty($temp)) 
         { 
          echo '<div class="c" style="margin-top:20px;">'; 
          echo $temp; 
          echo '</div>'; 
         } 
         //do not output if empty tags (problem with div margin) 

Es muss möglich sein, diese effizienter zu machen. Wäre es schneller, die Zeichenfolge in HTML-DOM zu konvertieren und dort zu überprüfen?

Antwort

1

Regular expressions are not the right tool for parsing HTML.

Als nicht-spezifische Antwort, ich habe eine DOM-Parsing-Bibliothek empfehlen, dies zu erreichen. Um ein paar gotchas zu nennen, die reguläre Ausdrücke ein Alptraum machen:

  1. Sie <a></a> Tags fangen können, aber werden Sie fangen <a />-Tags?
  2. Ist das folgende Tag leer ?: <p><a></a></p> Wenn ja, wird Ihr Code es fangen? Wenn dies nicht der Fall ist, wie viele Durchgänge müssen Sie auf der Schnur ausführen, bevor Sie genug Selbstvertrauen haben, um alle gefangen zu haben?
  3. Fangen Sie Tags, die nicht richtig geschlossen sind?
  4. Fangen Sie Tags, die sich überschneiden?
Verwandte Themen