Joerg Peschke: HTML-Tags entfernen mittels RegExp?

Hallo RexExper,
Ich weiss, das Thema ist so alt wie die Welt, aber meine Recherche in diversen Foren hat noch keine zufriedenstellende Lösung geliefert. Deswegen:

Ich bräuchte einen RexExp, der mir aus HTML-Quelltext die Tags entfernt (quasi eine Art HTML->Plaintext-Konverter).

Mein bisheriges Vorgehen
$html_text =~ s/<[^>]*>/gs;

klappt meistens, geht aber natürlich vor den Baum, wenn ich > in Attributen stehen habe:
<img = "foo" alt="bar>">blubb

liefert

">blubb
von der Problematik von maskierten > mal ganz abgesehen.

Frage: Kriegt man das mit RegExp halbwegs sauber hin? Oder muss ich doch wieder HTML::Parser den weiten Weg von CPAN her kommen lassen?

Gruesse,

Jörg

  1. Mahlzeit

    aguck:
    http://cpan.uwinnipeg.ca/dist/web

    Gruss, Rolf

    --
    KnowHow veröffentlichen statt patentieren!
    1. Mahlzeit

      aguck:
      http://cpan.uwinnipeg.ca/dist/web

      Gruss, Rolf

      Hmm, also reingeguckt in die RemoveHTML, stelle ich fest, ist das nichts anderes als das, was ich gemacht habe:

      $htmltext =~ s/<([^>]|\n)*>//ig;

      meins war

      $htmltext =~ s/<[^>]*>//gis;

      Das Problem mit >-Zeichen in Attributen hab ich damit aber immer noch.

      1. Hallo, programmiergott Peschke!

        tscha, mit php wär das nicht passiert ;-)
        http://www.php-manual.de/de/function.strip-tags.php

        freundl. Grüsse aus Berlin, Raik

        1. Hi Raik,

          tscha, mit php wär das nicht passiert ;-)
          http://www.php-manual.de/de/function.strip-tags.php

          Ist halt ne Profi-Sprache[TM]...

          Viellleicht wäre auch
          http://aktuell.de.selfhtml.org/tippstricks/cgiperl/html-in-html/index.htm
          ein Tipp.

          Viele Grüße
          Mathias Bigge

          1. Tach,

            Ist halt ne Profi-Sprache[TM]...

            Meinst Du Perl oder PHP oder keins von beiden? :)

            Viellleicht wäre auch
            http://aktuell.de.selfhtml.org/tippstricks/cgiperl/html-in-html/index.htm
            ein Tipp.

            Das koennte in der Tat klappen, dass ich >-Zeichen in Attributen einfach maskiere. Danke für den Tip!

            Gruesse,
            Joerg

        2. Hallo, programmiergott Peschke!

          tscha, mit php wär das nicht passiert ;-)
          http://www.php-manual.de/de/function.strip-tags.php

          freundl. Grüsse aus Berlin, Raik

          Knapp 5000 Zeilen Quellcode von Perl nach PHP konvertieren werde ich mir wegen ein paar >-Zeichen dann doch nicht antun...das wäre ja PERLen vor die Säue werfen :)

          Gruesse,
          Joerg

  2. hy Jörg

    Folgender Code ist von Tom Christianson und entfernt HTML Tags (verschachtelte über mehrere Zeilen)
    sowie SSI Tags

    $body =~ s{ <! (.*?) ( -- .*? -- \s* )+ (.*?) > }{ if ($1 || $3) { "<!$1 $3>"; } }gesx; #HTML
     $body =~ s{ < (?: [^>'"] * | ".*?" | '.*?' ) + > }{}gsx; #SSI

    mfg Beat

    1. Folgender Code ist von Tom Christianson und entfernt HTML Tags (verschachtelte über mehrere Zeilen)
      sowie SSI Tags

      $body =~ s{ <! (.*?) ( -- .*? -- \s* )+ (.*?) > }{ if ($1 || $3) { "<!$1 $3>"; } }gesx; #HTML
       $body =~ s{ < (?: [^>'"] * | ".*?" | '.*?' ) + > }{}gsx; #SSI

      mfg Beat

      Cool, vielen Dank!!! Werde ich gleich mal ausprobieren!

      gruesse,
      Joerg

      1. gehts gehts nicht?
        Hab' die Filter in der Eile falsch angeschrieben
        hast es vielleicht bemerkt.
        mfg Beat

        $body =~ s{ <! (.*?) ( -- .*? -- \s* )+ (.*?) > }{ if ($1 || $3) { "<!$1 $3>"; } }gesx; #----SSI
        $body =~ s{ < (?: [^>'"] * | ".*?" | '.*?' ) + > }{}gsx; # ----HTML