PHP <Body> auslesen, und JS entfernen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • PHP <Body> auslesen, und JS entfernen

    Hallo,

    ich habe ein kleines Problem. Ich erstelle ein Analyse Script welches mir den Body Parsen soll, leider klappt das nicht so richtig.

    Die Suche sieht so aus (für pref_replace)

    PHP Code:
    $suche "%(<[ ]*\?.*\?[ ]*>)|(<[ ]*script[ ]*(.*)>.*<[ ]*/[ ]*script[ ]*>)%siU"
    Ich bekomme auch alles raus, außer inline Javascripte und den von Google (analytics). Fehlermeldungen bekomme ich leider keine.
    Ein Beispiel für inline wäre:
    HTML Code:
    $(document).ready(function() {
    und der Google Analytics Code sieht so aus

    HTML Code:
    <script type="text/javascript">
    
      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-XXXXXX-X']);
      _gaq.push(['_trackPageview']);
    
      (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
      })();
    
    </script>
    Vielleicht hat jemand einen Tipp für mich?

    Danke !

  • #2
    Du willst den body parsen, warum suchst du dann nicht einfach nach <body> und </body>?
    This is what happens when an unstoppable force meets an immovable object.

    Comment


    • #3
      Sorry

      Falsch ausgedrückt. Ich will nur den reinen Text ohne b's oder strongs oder javascript "anzeigen".


      Gruß und danke

      Comment


      • #4
        Wieso wendest Du nicht die DOM Objekte von PHP an, die genau für Dein Anliegen entwickelt wurden? Auf jeden Fall kannst Du so auch nur den Text filtern.
        MM Newmedia | MeinBlog

        Comment


        • #5
          Hallo ezkimo,

          danke für den Hinweis, hatte ich aber auch schon probiert (leider ohne erfolg) der hat auch den script Bereich im Body nicht erkannt. Also die Scripte an sich bekomm ich hin, nur nicht die scripte

          HTML Code:
          $html = new DOMDocument();
          $html->loadHtml($html_content);
          $xpath = new DOMXPath($html);
          
          $nodebody = $xpath->query('//body');
          $scriptes = $xpath->query('//script');
          Gruß

          Comment


          • #6
            Poste mal bitte irgendwelche Testdaten, mir kommt das spanisch vor. Zeig mal, was du parsen willst und danach bitte auch, was du als Ergebnis erwartest.
            This is what happens when an unstoppable force meets an immovable object.

            Comment


            • #7
              Also ich habe es gerade mal mit dem oben bereitgestellten Javascript probiert. Läuft problemlos.

              Ausgangslage:
              PHP Code:
              $str = <<<XML
              <script type="text/javascript">

                var _gaq = _gaq || [];
                _gaq.push(['_setAccount', 'UA-XXXXXX-X']);
                _gaq.push(['_trackPageview']);

                (function() {
                  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
                  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
                  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
                })();

              </script>
              XML; 
              Fallbeispiel 1:
              PHP Code:
              $doc = new DomDocument();
              $doc->loadHTML($str);

              $elements $doc->getElementsByTagName('script');
              for (
              $i 0$i $elements->length$i++) {
                  echo 
              "<pre>";
                  
              var_dump($elements->item($i)->nodeValue);
                  echo 
              "</pre>";

              Ganz normales Suchen mittels getElementsByTagName();

              Fallbeispiel 2:
              PHP Code:
              $xpath = new DOMXPath($doc);
              $scripts $xpath->query('//script');

              for (
              $i 0$i $scripts->length$i++) {
                  echo 
              "<pre>";
                  
              var_dump($scripts->item($i)->nodeValue);
                  echo 
              "</pre>";

              Beide Fallbeispiele liefern den Inhalt der Script Tags. Jetzt kommt es eigentlich nur drauf an, wie Dein konkretes Beispiel aussieht, an dem diese beiden Herangehensweisen nicht funktionieren.
              MM Newmedia | MeinBlog

              Comment


              • #8
                Hallo,

                also mit deinem Fallbeispiel 1 werden tatsächlich (soweit ich das beurteilen kann) alle JS aus dem Body gefunden.
                Bei mir sieht es jetzt so aus:

                PHP Code:
                $doc = new DomDocument();
                $doc->loadHTML($this->content->html);

                $elements $doc->getElementsByTagName('script');
                for (
                $i 0$i $elements->length$i++) {
                    echo 
                "<pre>";
                    
                var_dump($elements->item($i)->nodeValue);
                    echo 
                "</pre>";

                Nur wie kann ich jetzt den ermittelten Code aus dem html Code extrahieren.

                Ich hatte die Idee $elements->item($i)->nodeValue in einem Array zu speichern und dann mit replace die Daten aus dem HTML Code zu ersetzen. Leider bekomme ich da immer einen Fehler 500 ..

                Ich habe auch hier im Forum mehrere Ansätze gesehen mit removeChild die aber irgendwie bei mir nicht hinhauen.

                Hättest du da eventuell noch einen Tipp für mich ?

                Vielen Dank aber schon einmal für deine Hilfe!

                Comment


                • #9
                  Ich habe gerade noch mal getestet, ob die Inhalte in der for-Schleife manipuliert werden können. Das funktioniert problemlos, indem Du dem Du der Eigenschaft nodeValue einfach einen anderen Wert zuweist. Schau Dir bitte in diesem Zusammenhang auch die DomDocument::saveXML() und DomDocument::saveHTML() Methoden an. Ich glaube nämlich, dass Du das DomDocument Objekt von PHP noch nicht richtig verstanden hast. Wenn Du weitere Probleme haben solltest, schreibe bitte immer Deinen Lösungsansatz als Codebeispiel dabei.
                  MM Newmedia | MeinBlog

                  Comment


                  • #10
                    Schreibe alles was du über echo ausgibst in eine Variable, dann kannst du die Variable später ausgeben mit echo und z.B. in einem Textarea.

                    Beispiel:
                    $aus .= '<body><h1>';
                    ...
                    $aus .= '</body></html>';

                    echo $aus;

                    echo "<textarea name='DOM String' class='myfirst' rows='12' cols='60' wrap='virtual' id='TEXTAREA1'>$aus</textarea>";

                    unset($aus);
                    php = play home page

                    Comment


                    • #11
                      Hallo,

                      ich wollte mich nur schnell bedanken, die Tipps waren wirklich sehr hilfreich. Mit DOM konnte ich das mehr oder minder Problemlos auslesen

                      Comment


                      • #12
                        Du hast meist diese Tags selbst Geschrieben und Definiert, nur bei größeren Projekten die Dynamisch sind ist ein Tool namens DOM Inspektor sehr Hilfreich.

                        Originally posted by none View Post
                        Hallo,

                        ich wollte mich nur schnell bedanken, die Tipps waren wirklich sehr hilfreich. Mit DOM konnte ich das mehr oder minder Problemlos auslesen
                        php = play home page

                        Comment

                        Working...
                        X