2011-01-14 10 views
0

ich interessant bin den ganzen Text innerhalb der folgenden Tags bei der Beseitigung:den gesamten Text innerhalb bestimmter Tags entfernen

<p class="wp-caption-text">Remove this text</p> 

Kann mir jemand eine Vorstellung davon, wie sich dies in PHP getan werden?

Vielen Dank

+1

Haben Sie den Tag halten wollen, und entfernen Sie den Text oder das gesamte Element entfernen? –

+2

möglich Duplikat von [Regex - ein bestimmtes Wort innerhalb bestimmter Tags greifen] (http://stackoverflow.com/questions/3332619/regex-grab-a-spezifische-wordin-within-spezifische-Tags) und mindestens ein paar Dutzend mehr. Verwenden Sie [einen DOM-Parser] (http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662) und die Lösung ist die gleiche für alle "Textinhalt abrufen für' '" – Gordon

+2

Ich bin eigentlich kein Fan einer dieser Antworten um ganz ehrlich zu sein. Während gute Patches sind sie keine Lösungen. Die einzige wirkliche Lösung besteht darin, den Code durchzugehen und die Orte zu entfernen, die diesen Inhalt erzeugen. Sonst haben Sie eine Prozesszeit, in der Sie Inhalte erstellen und eine Zeit damit verschwenden, Inhalte zu entfernen. –

Antwort

3

Lassen Sie sich in der es von dem Tag und Inhalt zu befreien:

$content = preg_replace('/<p\sclass=\"wp\-caption\-text\">[^<]+<\/p>/i', '', $content); 

oder wenn Sie die Tags erhalten wollen:

$content = preg_replace('/(<p\sclass=\"wp\-caption\-text\">)[^<]+(<\/p>)/i', '$1$2', $content); 
+0

Arbeitete wie ein Charme. Danke ein Haufen – Levi

+0

@levi Kein Problem! –

0

Wenn es immer der gleiche Tag, das Sie einfach für die Zeichenfolge Suche starten kann. Verwenden Sie die Position, die zu einer Teilzeichenfolge von ihr zum schließenden Tag führt. Oder Sie könnten einen regulären Ausdruck verwenden, es gibt gute hier, die Ihnen helfen können.

+0

Kannst du bitte Beispielcode angeben, wie ich das machen könnte, da ich mit PHP sehr unerfahren bin – Levi

1
diese

Versuchen:

$string = '<p class="wp-caption-text">Remove this text</p>'; 
$pattern = '/(.*<p .*>).*(<\/p>.*)/'; 
$replacement = '$1$2'; 
echo preg_replace($pattern, $replacement, $string); 
+0

Diese REGEXP funktioniert nicht, wenn die Zeichenfolge eine ganze Webseite ist. Ihr. * Zwischen Ihren p-Tags wird so viel wie möglich für die gesamte Seite aufnehmen, bis es das allerletzte p auf der Seite findet. –

2

Als Bit Übergeordnete Alternative zu regulären Ausdrücken.

Sie können mit DOM verarbeiten. Sie können alle gewünschten Knoten mit XPath //p[@class="wp-caption-text"] abgleichen.

Zum Beispiel:

$doc = new DOMDocument(); 
$doc->loadHTML($yourHTMLasString); 
$xpath = new DOMXPath($doc); 
$query = '//p[@class="wp-caption-text"]'; 
$entries = $xpath->query($query); 
foreach ($entries as $entry) { 
    $entry->textContent = ''; 
} 
echo $doc->saveHTML(); 
+0

Ich mag diese Lösung auch sehr. Denken Sie daran, dass sowohl diese als auch die Regexp-Datei einen großen Overhead haben, wenn die Dokumentgröße zunimmt. Ich würde nur empfehlen, diese Operationen nur einmal auszuführen und die Ausgabe in einem Cache zu speichern, der ohne Verarbeitung reserviert wird. –

+0

@Geofferey: True, für sehr große Dateien würde ich empfehlen, über Logik zu XSLT zu schreiben und es mit SAX XSLT-Prozessor laufen zu lassen. – vartec

Verwandte Themen