Ankündigung

Einklappen
Keine Ankündigung bisher.

Hilfe: preg_replace

Einklappen

Neue Werbung 2019

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

  • Hilfe: preg_replace

    hallo zusammen
    hab wieder mal ein problem mit preg_replace. Hier erstmal den Code:
    PHP-Code:
    <?php
    function replaceTextareatoImage($__text)
    {
    $text      $__text;
    $pattern='#<TEXTAREA (.*)>(.*)</TEXTAREA>#';
    $replace='<img src=\"js/tiny_mce/plugins/formular/images/textarea.jpg\" alt=\"\1 text=\2\" >';
    $result=preg_replace($pattern$replace$text);
    return 
    $result;        
    }
    ?>
    Wenn die Variable $__text so aussieht:
    <TEXTAREA name=\'nachricht\' cols=\'20\' rows=\'3\' >Ihre Nachricht</TEXTAREA>
    ...also nur ein Textarea im text ist, dann funktioniert es einwandfrei.

    Wenn die Variable $__text jedoch mehrere Textareas hat, also so aussieht:
    <TEXTAREA name=\'nachricht\' cols=\'20\' rows=\'3\' ></TEXTAREA>
    <TEXTAREA name=\'nach2\' cols=\'20\' rows=\'3\' ></TEXTAREA>

    ...dann geht das nicht mehr. ->ausgabe von $result ergibt dann:
    <img src=\"js/tiny_mce/plugins/formular/images/textarea.jpg\" alt=\"name=\'nachricht\' cols=\'20\' rows=\'3\' ></TEXTAREA> <TEXTAREA name=\'d-44634574-\' cols=\'20\' rows=\'3\' text=\" >

    eigentlich sollte er nun 2 bilder ausgeben, im alt text stehen jeweils die attribute des textareas(cols=, name=, ...). aber der macht irgend etwas komisches...

    Was ist falsch? Kann mir jemand helfen?
    vielen dank!

  • #2
    Musste den "ungreedy"-Modifikator nutzen
    PHP-Code:
    <?php
    function replaceTextareatoImage($__text)
    {
    $text      $__text;
    $pattern='#<TEXTAREA (.*)>(.*)</TEXTAREA>#U';
    $replace='<img src=\"js/tiny_mce/plugins/formular/images/textarea.jpg\" alt=\"\1 text=\2\" >';
    $result=preg_replace($pattern$replace$text);
    return 
    $result;        
    }
    ?>
    (Man beachte das große "U")

    Alternativ kannst du (ebenfalls per Modifikatoren) die Zeichenkette zeilenweise suchen/ersetzen
    PHP-Code:
    <?php
    function replaceTextareatoImage($__text)
    {
    $text      $__text;
    $pattern='#<TEXTAREA (.*)>(.*)</TEXTAREA>#e';
    $replace='<img src=\"js/tiny_mce/plugins/formular/images/textarea.jpg\" alt=\"\1 text=\2\" >';
    $result=preg_replace($pattern$replace$text);
    return 
    $result;        
    }
    ?>
    (Hier zu beachten: Das "e")

    Das geht übrigens noch beliebig kompliziert, wenn man die Modifikatoren zB in den Ausdruck selbst einsetzt

    Grund ist, dass es verschiedene Suchstrategien gibt: Einmal "greedy" ("gierig"), was sowas bedeutet wie "soviel wie möglich"
    Oder eben "ungreedy" oder "lazy" ("faul"), was ebenso sowas heißt wie "so wenig wie nötig".

    Mehr zu Modifikatoren hier

    Kommentar


    • #3
      Wow... Vielen Dank... jetzt klappts
      ist das 1. mal dass ich reguläre ausdrücke verwende. 2 Tage verplämpert wegen dem U. hatte schon alles mögliche versucht.
      und das traurige ist, dass ich in der umgekehrten funktion (ImagetoTextarea) das U hatte.
      mann o mann....

      Kommentar

      Lädt...
      X