Tags aus Text entfernen
Luis
- cgi
0 TOOX-rudi0 Frank Schönmann0 Luis
Hallo Spezialisten.
Ich habe ein Problem, das ich nicht lösen kann. Ich will aus einem Text sämtliche Tags einfach entfernen,
natürlich auch Zeilenübergreifend.
$message =~ s/<.+>/ /sg;
funktioniert nicht, weil dieser Befehl alles ab der ersten spitzen Klammer bis zur letzten rauslöscht, also auch
den gesamten Text zwischen dem ersten Tag und dem letzten.
Auf mit der Option \b (Wortanfang, Wortende) komme ich nicht klar.
$message =~ s/<.+>\b/ /sg;
Das funktioniert bei einfachen Tags, nicht aber beim "a href" Tags und anderen, in denen Leerzeichen vorkommen.
Wie kann ich das Problem lösen? Es sollen einfach alle Zeichen zwischen einer öffnenden sp. Klammer "<" und
der nächstfolgenden schließenden sp. Klammer ">" entfernt werden. (Natürlich die Klammern auch)
Vielen Dank für ev. Hilfe
Luis
alle teilenumbrüche entfernen sonst kann es probleme geben
dann tags entfernen:
---------------------------------------------------------------
$message =~ s/[\n\r]//g;
$message ~ s/<[^>]*>//gs;
---------------------------------------------------------------
es werden aber nicht alle tags damit entfernt:
<!-- <p>text</p>-->
oder
<script>
function f() {
}
</script>
werden nicht korreckt entfernt.
es ist auch nicht möglich, alle varianten zu entfernen, da es ja "tausende" gibt. man sollte dann noch weitereregexp (muß man einfach testen, was nicht entfernt wurde) anfügen, um den anderen ungewollten rest zu entfernen.
das oben beschriebene beisbiel fungtioniert nur bei einfachem quelltext!
hi!
alle teilenumbrüche entfernen sonst kann es probleme geben
Sorry, aber das ist quatsch. Wieso sollte es mit Zeilenumbrüchen
Probleme geben? Hast du irgendwelche Beispiele?
bye, Frank!
hi!
Ich habe ein Problem, das ich nicht lösen kann. Ich will aus einem
Text sämtliche Tags einfach entfernen, natürlich auch
Zeilenübergreifend.
$message =~ s/<.+>/ /sg;
funktioniert nicht, weil dieser Befehl alles ab der ersten spitzen
Klammer bis zur letzten rauslöscht, also auch den gesamten Text
zwischen dem ersten Tag und dem letzten.
Das liegt daran, dass reguläre Ausdrücke "gierig" (engl. "greedy")
sind, d.h. sie matchen möglichst viel statt möglichst wenig. Das kann
man durch ein ? allerdings ändern:
$message =~ s/<.+?>//sg;
bye, Frank!
Danke,
habs kapiert. Funktioniert jetzt einwandfrei, auch wenn Zeilenumbrüche im tag sind.
Kommentare und scripts kommen im text nicht vor, so dass mir diese tag´s keine Probleme machen.
Vielen Dank
Luis