Eddie: Zeichenketten ersetzen

Hallo allerseits,

ich brauche eine Ersetzungsfunktion, die mir einen String der Form

XXX:-)XXX
  umsetzt in
XXX<img src="1.gif" ...>XXX

Dabei hat der img-Tag immer dieselbe Form, nur die Nummer der Datei aendert sich, also
:-) ==> 1
:-( ==> 2
usw.

Bisher mache ich das mit strtr(...) und einem Ersetzungsarray der Form

$replace = array (
   ':-)' => '<img src="/1.gif">',
   ':-(' => '<img src="/2.gif">'
   //, undsoweiter...
);

Gibt's da nicht was Einfacheres, vielleicht mit RegEx, so dass ich das Tag-Grundgeruest nur einmal angeben muss und eben nur die Smileys zu Zahlen zuordne?

Danke für eure Hilfe,
Eddie

--
Old men and far travelers may lie with authority.
  1. Hallo Eddie.

    Dein Problem scheint mir gar nicht so sehr bei der Ersetzung der Zeichenketten zu liegen... Falls dich das mehrfache Schreiben der Image-Tags tatsächlich *so sehr* stört, bastel dir doch eine Funktion, in die du eine Zahl reinsteckst und den entsprechenden Image-Tag als Ergebnis zurückbekommst. Dein Ersetzungsarray könnte dann so aussehen:

    $replace = array(
      ':-)' => MakeTag(1),
      ':-(' => MakeTag(2)
    );

    1. Hmm, hab gerade so überlegt... Wenn du die Smilies _wirklich_nur_durch_Zahlen ersetzen willst, kannst du es auch ganz billig machen: Smilies in ein Array, dieses Array mit foreach durchlaufen und in jedem Durchlauf mittels str_replace() das Smilie durch seine Position im Array ersetzen.

      So vielleicht...

      $replace = array(1 => ':-)', ':-(', ... );

      foreach ($replace as $key => $val) {
        $src = str_replace($val, "<img src="$key.gif">", $src);
      }

      Wobei $src deine zu bearbeitende Zeichenkette wäre.

      1. Hallo Alexander,

        danke Dir! Hab's auf die erste Art geloest, weil ich irgendwie hoffe, dass strtr(...) schneller ist als sukzessives Ersetzen in einer Schleife. Vermutlich Aberglaube, aber auch egal, jetzt funktionierts: http://www.umdiewelt.de/Asien/Indischer-Subkontinent/Indien/Reisebericht-146/Kapitel-0.html

        Danke, Eddie

        --
        Old men and far travelers may lie with authority.