Chris: HTML innerhalb von <body></body> auslesen

Hallo

Ich lese mit fopen den Inhalt einer HTML-Datei aus. Nun möchte aber nur die Daten die sich innerhalb des Bodys befinden, ausgeben (also alles zwischen <body> und </body>). Hab mal daran gedacht z.B. mit ereg nach <body bzw </body> zu suchen. Aber wie krieg ich nun den Inhalt der sich dazwischen befindet?

Gruss Chris

  1. Hi,

    so ungefaehr:

    if (eregi ("<body>(.*)</body>", $deinText, $regs))
    {
        $inhalt = $regs[1];
    }

    Gruss, Eddie

    1. Hi,

      so ungefaehr:

      if (eregi ("<body>(.*)</body>", $deinText, $regs))
      {
          $inhalt = $regs[1];
      }

      Gruss, Eddie

      hi eddie

      Ich bin zwar in ReExp nicht Sattelfest aber mit dem Ausdruck bekommst ein problem..

      Angenommen dein bodytag ist unabsichtlich modifiziert
      zb.
      <body bgcolor="#000000">.....</body>
      So weit ich das beurteilen kann wird das mit deinem Ausdruck nicht gefunden

      mfg peter

      1. Ich bin zwar in ReExp nicht Sattelfest aber mit dem Ausdruck bekommst ein problem..

        Angenommen dein bodytag ist unabsichtlich modifiziert
        zb.
        <body bgcolor="#000000">.....</body>
        So weit ich das beurteilen kann wird das mit deinem Ausdruck nicht gefunden

        Daran habe ich auch gedacht. Gibt es irgend eine 'saubere' Lösung womit sich auch dieses Problem umgehen lässt?

        Gruss Chris

        1. Moin!

          Ich bin zwar in ReExp nicht Sattelfest aber mit dem Ausdruck bekommst ein problem..

          Angenommen dein bodytag ist unabsichtlich modifiziert
          zb.
          <body bgcolor="#000000">.....</body>
          So weit ich das beurteilen kann wird das mit deinem Ausdruck nicht gefunden

          Daran habe ich auch gedacht. Gibt es irgend eine 'saubere' Lösung womit sich auch dieses Problem umgehen lässt?

          Ja, indem du dir einen Parser schreibst. Ist halb so wild, wie es klingt.

          Überlege dir, was passieren muss:
          1. Lies Text ein. Suche dabei nach dem String "<body" in allen Schreibweisen (case-insensitiv).
          2. Wenn der String gefunden wurde: Suche nach dem nachfolgenden ">".
          3. Alle Zeichen, die bislang gelesen wurden, werden verworfen. Alle Zeichen, die jetzt folgen, sind gewünscht.
          4. Lies solange Zeichen ein, bis du auf den String "</body>" triffst (case-insensitive). Den String selbst musst du nicht mehr mit kopieren, und wenn du ihn gefunden hast, kannst du deine Suche abbrechen - in einer validen HTML-Datei kommt kein zweiter Body vor.

          - Sven Rautenberg

  2. Sers,

    warum immer so komplex!
    <?
    $_FILE=implode("",file("test01.html"));
    echo "<pre>".htmlentities($_FILE)."\n\n\n\n</pre>";
    eregi('<body[^>]*>([^<]*)</body>',$_FILE,$arr);

    foreach($arr AS $v){
     echo "<pre>".htmlentities($v)."</pre>";
    }
    ?>

    rH

    P.S. Das restliche Selfgelaber hätte man sich sparen können vorallem das von Herrn Rautenberg!

    1. eregi('<body[^>]*>([^<]*)</body>',$_FILE,$arr);

      ^^^^^^^ Du erlaubst keine weiteren tags innerhalb von body!?

      _Die_ Lösung scheint mir das nicht gerade zu sein...

      1. <?
        $_FILE=implode("",file("test01.html"));
        echo "<pre>".htmlentities($_FILE)."\n\n\n\n</pre>";
        eregi('<body[^>]*>(.*)</body>',$_FILE,$arr);

        foreach($arr AS $v){
         echo "<pre>".htmlentities($v)."</pre>";
        }
        ?>

        Oh mann,

        jetzt fang ich auch schon an! :(
        FreitagsSelfKontrolle!

        <?
        $_FILE=implode("",file("test01.html"));
        echo "<pre>".htmlentities($_FILE)."\n\n\n\n</pre>";
        eregi('<body[^>]*>(.*)</body>',$_FILE,$arr);
          // Aber jetzt funzt es
        foreach($arr AS $v){
         echo "<pre>".htmlentities($v)."</pre>";
        }
        ?>

        Chu rH

        1. Hey,

          klasse Ansatz... doch leider funz es nicht wie gewünscht. Der Body wird nicht getrennt und es werden immer "<" und ">" vor und nach jedem Befehl eingefügt...

          Bin ich zu dämlich???

          Gruß vom Doc

          1. Der Body wird nicht getrennt

            ... was soviel heißt wie...?

            und es werden immer "<" und ">"
            vor und nach jedem Befehl eingefügt...

            echo "<pre>".htmlentities($v)."</pre>";
                         ^^^^^^^^^^^^ schuldig im Sinne der Anklage

            Wenn Du uns verrätst, welchem Zweck Deine Aufgabenstellung dienen soll, könnten wir Dir eventuell noch besser weiterhelfen.

            1. Hey Bernard,

              Der Body wird nicht getrennt
              ... was soviel heißt wie...?

              ... wollte damit eigentlich nur sagen, dass der Header und Foot leider immer noch dran ist. ;-))

              und es werden immer "<" und ">"
              vor und nach jedem Befehl eingefügt...
              echo "<pre>".htmlentities($v)."</pre>";
                           ^^^^^^^^^^^^ schuldig im Sinne der Anklage

              Wenn Du uns verrätst, welchem Zweck Deine Aufgabenstellung dienen soll, könnten wir Dir eventuell noch besser weiterhelfen.

              Okay, folgendes Problem was schon etlicher meiner Zeit gekostet hat... ich will ein Börsen-Modul (http://brokerage.teledata.de/BROKERAGE/eyecatcher/ci_hoch.htm" in eine Seite integrieren. Dazu muss ich den Text zwischen <body> und </body> auslesen, trennen und auf der Seite in den HTML-Code einfügen.

              Ein weiteres Problem sind noch die Unterverzeichnisse der Grafiken. Ist auch möglich bei z.B. "../l_images/transp.gif" das "../" durch den absoluten Pfad ersetzen zu lassen...?

              Achso, den ganzen Hickmick muss ich leider machen, da die Seite nachher korrekt auf Netscape 4.7 angezeigt werden muss. Da ist mit ilink leider nicht viel zu machen und der layer lässt Netscape nur Steuerzeichen anzeichen... Probleme über Probleme... ;-))

              Viele Grüße aus Hannover