PHP <Body> auslesen, und JS entfernen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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.

    Kommentar


    • #3
      Sorry

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


      Gruß und danke

      Kommentar


      • #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

        Kommentar


        • #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ß

          Kommentar


          • #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.

            Kommentar


            • #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

              Kommentar


              • #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!

                Kommentar


                • #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

                  Kommentar


                  • #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

                    Kommentar


                    • #11
                      Hallo,

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

                      Kommentar


                      • #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.

                        Zitat von none Beitrag anzeigen
                        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

                        Kommentar

                        Lädt...
                        X