teil aus array löschen

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

  • teil aus array löschen

    Hi,
    wie kann ich einen bestimmten bereich zwischen zwei merkmalen in einem array löschen bzw ersetzen,
    ich dachte da an preg_replace...
    mein code sieht im moment wie folgt aus:

    PHP-Code:
    <?
    $pattern = '~<script(.*)</script>~is'; 
    $replace = ''; 
    $result = preg_replace($pattern, $replace, $matches); 
    //$matches ist ein array mit einem html text 
    //. . . also <html>Plapla<script>irgendwelche #PCDATA</script>plapla</html>
    echo $result[0][0];
    ?>
    wenn ich mir jetzt $result ausgeben lasse erscheint jedoch nur der buchstabe A

    hat irgendjemand ne idee?
    ..hoffe mal das Problem ist so genau genug geschildert
    mfg martin

  • #2
    Könntest du das etwas konkretisieren? Suchst du den Bereich zwischen zwei Array-Keys oder geht es hier nur um dein Inhalt eines einzigen Array-Elements?
    Nieder mit der Camel Case-Konvention

    Kommentar


    • #3
      @Smartini
      OffTopic:

      geschüttelt doer gerührt?


      Verwende niemals .* in einem RegExp wenn du dazu noch explizite Muster angibst. Zumindest solange der RegExp selber nicht mit dem Schalter U oder dem Modifikator ? direkt nach .* auf UNGREEDY gesetzt wird. Sonst wird .* einfach alles matchen (inkl </script>)
      Btw: Woher nimmst du die Info, dass preg_replace() einen Array mit den Treffern zurückgeben würde? Das gibt den geänderten String und sonst gar nichts zurück
      Ich würde den RegExp mal so probieren
      PHP-Code:
      $pattern '~<script(.*)</script>~isU'
      $replace '\\1'
      echo 
      preg_replace($pattern$replace); 
      Gruss

      tobi
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        hi,
        ..also

        hier mal der ganze code . . .


        PHP-Code:
        <?
        $url =     $_POST['page']; //liest mir den namen einer vorher bestimmten website aus
          $quelle        =    @file($url);
          $data          =    implode ("", $quelle);
        preg_match_all('|<body(.*?)</body>|Uism',$data,$matches); 
        //schreibt mir den bereich zwischen <body und </body> in das array $matches
        //jetzt will ich aber nur den text und deswegen soll alles zwischen <script und </script> //gelöscht werden. . . 

        //ab hier hab ich das problem
        $pattern = '~<script(.*)</script>~isU'; 
        $replace = '\1'; 
        $result = preg_replace($pattern, $replace, $matches); 
        $text = strip_tags($result[0][0]); //entfernt tags wie zb <a> oda so
        ?>
        hab dummerweise vorher noch nich so viel mit arrays gearbeitet, da mir preg_match_all den text aber erst einmal in nem array ausliest hab ich ja keine andere wahl

        mfg martin

        Kommentar


        • #5
          preg_match_all() ist überflüssig weil normalerweise nicht mehr als ein body-Tag in einem HTML Dokument vorkommen darf.
          $matches ist ein Array und preg_replace() verlangt nach einem String als subject. Lass die mal $matches mittels var_dump() ausgeben, dann solltest du sehen welches Element von $matches deinem gesuchten String entspricht
          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

          Kommentar


          • #6
            habs jetzt fast so wie ichs will . . .
            aber irgendwie gibt er mir den gesamten inhalt zweimal aus und beim zweiten mal wo ers ausgiebt gibt er mir auchnoch das endstück des bodytags mit aus also. . .

            website text ohne tags
            onload="" class="body">website text ohne tags

            hab ich irgendwas übersehen oder nen denkfehler im script??


            PHP-Code:
            <?
            $url =     $_POST['page'];

              $quelle        =    @file($url);
              $data          =    implode ("", $quelle);
              
              
            preg_match('|<body(.*?)</body>|Uism',$data,$matches);

            $str = implode('', $matches);
            $pattern = '~<script(.*)</script>~isU'; 
            $replace = ""; 
            $result = preg_replace($pattern, $replace, $str); 

            $text = strip_tags($result);


            ?>
            Zuletzt geändert von smartini; 14.05.2008, 13:57.

            Kommentar

            Lädt...
            X