PHP: Tags inkl. Inhalt entfernen?

  • #1
M

Michael_B

Bekanntes Mitglied
Themenersteller
Dabei seit
21.09.2002
Beiträge
860
Reaktionspunkte
0
Ort
Köln
Hallöchen,

ich will mit PHP ein Progi schreiben, das HTML-Dateien durchgeht und Tags entfernt, so dass nur noch der Text zu sehen ist.
Die Methode Strip-Tags ist ja schon ganz gut, die Funktion erfüllt allerdings nicht alle Kriterien, die ich stelle. Ich habe nämlich tw. in den HTML-Dateien hochgestellten Text (bsp: <sup>xyz</sup>). Für diesen Fall möchte ich gerne nicht nur den Tag, sondern auch den darin befindlichen Text entfernen.
Meine Frage: gibt es eine solche Funktion oder gibt es vielleicht einen Platzhalter (wie % oder _ bei SQL)? Mit einem Platzhalter könnte ich dann mit str_replace arbeiten. (str_replace(<sup>xyz</sup>,,$string)).

Für Ideen und Anregungen: thx
 
  • #2
Hi

Was du suchst sind Regular Expressions:
$gettext = preg_replace(|<sup>.*?</sup>|is, $text);

Gruß, Michael
 
  • #3
Sooo, erstmal ein dickes Dankeschöön.  :D
Ich habe mich mittlerweile mal ein wenig schlau gemacht bzgl. der Regular Expressions. Ich versuche jetzt mal zu entschlüsseln, was die Zeichen eigentlich bedeuten.

$gettext = preg_replace(|<sup>.*?</sup>|is, $text);
Hier hattest du nen kleinen Fehler drin. Es fehlte noch der String der gegen das angegebene Muster ersetzt werden soll. Richtig lautet die dann:
$gettext = preg_replace(|<sup>.*?</sup>|is, , $text);

Der Punkt (.) ist ein Platzhalter, der auf jedes beliebige Zeichen passt.
Das Sternchen (*) erkennt das vorstehende Element mehrfach, sofern es vorhanden ist. Das bezieht sich also im obigen Beispiel auf den Punkt. (Ohne * würde ich nur nach Mustern suchen, die innerhalb des Tags nur 1 Zeichen haben.)
Das Fragezeichen (?) passt auf ein beliebiges Zeichen einmal, sofern es vorhanden ist. Aber: in diesem Zusammenhang check ich das nicht ganz. Auf was bezieht sich denn (im Beispiel) das '?' ?
Die Pipe (|) grenzt das Muster ein (glaub ich jedenfalls).

Aber wofür ist das 'is' noch in dem String??
 
  • #4
Hi

Stimmt, das eine Argument hatte ich vergessen.
Die | sind die Delimiter in diesem Fall, grenzen also wie du richtig festgestellt hast das ganze ein.

Das ? hinter .* steht für bis zum ersten was danach kommt. Ohne das würde es den kompletten Text zwischen dem ersten <sup> und dem letzten </sup> ersetzen die in deinem Text vorkommen, auch wenn es dazwischen schon mehrmals wieder geschlossen wurde.

Das is sind Modifier.
i bedeutet groß-, kleinschreibung egal, was du ja sicher haben willst und s bedeutet, das das .* auch über Zeilenumbrüche im Quellcode hinausgeht.

Ist ganz gut im PHP Manual beschrieben.
http://www.php.net/manual/en/pcre.pattern.modifiers.php
http://www.php.net/manual/en/pcre.pattern.syntax.php

Gruß, Michael
 
  • #5
Sehr geil... macht richtig Spass, damit zu arbeiten.
Vielen Dank für deine nützlichen Tipps.
:) :D ;D

Habe da nur noch ein Problem: in einem anderen Skript muss ich die grammatische (?) Gültigkeit von eMail-Adressen überprüfen. Nur weiss ich nicht genau, wie die Grammatik aussieht, also ob es bspw. erlaubt ist, mit Zahlen zu beginnen. Wäre nett, wenn mir da jmd. mal eine preg_match-Funktion schreiben könnte ;D

Vielen vielen vielen Dank.
 
  • #6
Hi

Ich benutze diese Funktion:
preg_match(/[a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum)/i, $ob)
Die ist eigentlich recht verbreitet.
Und gleichzeitig eine gute Übung zum Verständnis :)

Gruß, Michael
 
  • #7
Danke für die nette Begrüßung
aber wo finde ich das Forum für Windows live Mail, oder wird das nicht bearbeitet.
Danke Peter
 
  • #8
Hallo,
dein Problem würde ich in die Kategorie "Software" schreiben.



Gruß Lennox1058
 
Thema:

PHP: Tags inkl. Inhalt entfernen?

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.836
Beiträge
707.957
Mitglieder
51.488
Neuestes Mitglied
elkhse
Oben