Hennerfeind: html-datei mit perl lesen

Guten Abend zusammen,

ich habe ein kleines Problemchen. Ich müchte in eine durch Perl generierte dynamische Tabelle noch eine weitere externe HTML-Datei einbetten. Jetzt müsste natürlich auch jeder link (url, sowie ich links zu images) geändert werden.

Beispiel:
Wenn ich in meine Tabelle die T-Online-Site einbetten möchte muss ich dort die ganzen Links ändern:

www.t-online.de ==>  index.cgi?main=html&which=www.t-online.de
www.t-online.de/bilder/img.jpg ==> index.cgi?main=html&which=www.t-online.de/bilder/img.jpg

Hat da wer ne Ahnung ob das mit CGI funktioniert.

  1. Gute Nacht, *g*

    ja, dafür ist Perl wie geschaffen - Stichwort "Suchen und Ersetzen mit Regulären Ausdrücken". Im Wesentlichen liest Du die gewünschte externe Seite Zeile für Zeile ein und machst z.B.

    s{<a href="([^"]*)">}{<a href="index.cgi?main=html&which=\1">}gi;

    Das ersetzt Dir alle relativen Links nach Deiner Angabe. Allerdings muß man diverse Sonderfälle berücksichtigen, z.B. das mögliche http:// am Anfang von absoluten Links, dann brauchst Du einen Ausdruck für die IMG-Tags usw. Es ist allerdings insgesamt relativ einfach zu bewältigen. Wie Du die Ausdrücke gestaltest, kommt auch ganz darauf an, wie der Parameter "which" verarbeitet werden soll.
    Du sprichst schon Perl? -> http://www.perldoc.com/perl5.8.0/pod/perlrequick.html. Ansonsten ist das Perl-Kapitel im selfhtml vorher nicht unhilfreich.

    Simon

    1. Gute Nacht, *g*

      ja, dafür ist Perl wie geschaffen - Stichwort "Suchen und Ersetzen mit Regulären Ausdrücken". Im Wesentlichen liest Du die gewünschte externe Seite Zeile für Zeile ein und machst z.B.

      s{<a href="([^"]*)">}{<a href="index.cgi?main=html&which=\1">}gi;

      Das ersetzt Dir alle relativen Links nach Deiner Angabe. Allerdings muß man diverse Sonderfälle berücksichtigen, z.B. das mögliche http:// am Anfang von absoluten Links, dann brauchst Du einen Ausdruck für die IMG-Tags usw. Es ist allerdings insgesamt relativ einfach zu bewältigen. Wie Du die Ausdrücke gestaltest, kommt auch ganz darauf an, wie der Parameter "which" verarbeitet werden soll.
      Du sprichst schon Perl? -> http://www.perldoc.com/perl5.8.0/pod/perlrequick.html. Ansonsten ist das Perl-Kapitel im selfhtml vorher nicht unhilfreich.

      Simon

      Danke für die schnelle Antwort.
      Dass es mit Pattern-Matching funktioniert war mir eigentlich klar. Ich dachte nur dass es da eine Funktion im cgi geben müsste, weil das ja sicher demöfteren vorkommen müsste.

      Christian

      1. Jetzt hab ichs!!!

        use HTML::LinkExtor; ist das Stichwort.

        Hier ein kleiner Codeschnipsel:

        use HTML::LinkExtor;

        neues Parser-Objekt

        $p = HTML::LinkExtor->new();

        lokale Datei öffnen und parsen

        parse_file() wird von HTML::Parser geerbt.

        $p->parse_file('/usr/local/httpd/htdocs/index.html');

        Ausgabe der Ergebnisse

        for ($p->links() ) {
                 print "@{$_}\n";
        }