Preg_replace Problem

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

  • Preg_replace Problem

    Hallo,

    ich hab folgendes Problem: Ich lese eine HTML-Datei ein und möchte nun in bestimmten IMG-Tags die Breite ändern. Im Klartext:
    Es soll bei allen IMG-Tags, die mit <img src="../images/b5.gif" beginnen, width="9" durch width="10" ersetzt werden. Das Problem dabei ist, dass zwischen src und width noch weitere Angaben stehen können, oder eben auch nicht.

    Ich hätte mir das so überlegt:

    PHP-Code:
    $fp fopen($file,"r+") or die("Konnte die Datei $file nicht öffnen!");
    $content fread($fp,filesize($file));
    $regex '/<img src="\.\.\/images\/b5\.gif"(.*?)width="9" height="10"(.*?)>/ims';
            
    $new_content preg_replace($regex,'<img src="../images/b5.gif"(.*?)width="10" height="10"(.*?)>',$content);
            
    rewind($fp);
    fwrite($fp,$new_content);
    ftruncate($fp,ftell($fp));
    fclose($fp); 
    Aber das funktioniert natürlich nicht, weil ich ja beim zweiten Argument von preg_replace keinen regulären Ausdruck schreiben kann. Wie könnte man das lösen?

    Vielen Dank im Voraus

    Johannes

  • #2
    $newcontent = preg_replace('/width="9"/', 'width="10"', $oldcontent);

    den alten Inhalt liest am besten mit string file_get_contents ein.
    Zuletzt geändert von Koala; 30.01.2006, 17:17.

    Kommentar


    • #3
      Danke, aber er soll ja nur width="9" height="10" ändern, wenn der IMG-Tag mit src="../images/b5.gif" beginnt und das ist ja in deinem Beispiel nicht gewährleistet.

      Sorry, wenn ich mich unverständlich ausgedrückt haben sollte.

      Kommentar


      • #4
        Was ist wenn du zuerst alle img-Tags aus dem Dokument liest, die deine Bedingungen erfülllen.
        PHP-Code:
        $temp = array();
        preg_match_all('/<img src="../images/b5.gif"[^>]*>/ims',$string,$array);
        foreach(
        $array as $wert){
            
        $temp[] = str_replace('width="9"','width="10"',$wert);

        Nun solltest du ein Array haben mit den korrigierten img-Tags. Diese musst du nun wieder an den korrekten Stellen einbauen.

        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


        • #5
          so - DER geht aber:

          PHP-Code:
          $result preg_replace('/(<img src="\\.\\.\/images\/b5\\.gif.*?)(width="9")/''\\1width="10"'$subject); 

          Kommentar


          • #6
            Ich habs jetzt noch ein wenig abgeändert, weil z.B. der img-Tag nicht mehr geschlossen wurde. Aber jetzt passt es optimal. Hier der gesamte Ausdruck:

            PHP-Code:
            $regex '/(<img src="\.\.\/images\/b5\.gif".*?)(width="9" height="10")(.*?>)/ims';
            $new_content preg_replace($regex'\\1width="10" height="10"\\3'$content); 
            Vielen Dank euch allen!
            Zuletzt geändert von adler1860; 31.01.2006, 14:34.

            Kommentar

            Lädt...
            X