PHP Newbe: Funktion für Smilie Replacen will nicht

Hello,

ich hab mir eine Funktion erstellt, mit der ich die Smilies in meinem Text ersetzten möchte. Irgendwie wird aber der Text ":)" auch so ausgegeben und nicht das Bild dafür.

Funktion:

function smilie($text) {
     $smilie = eregi_replace(":)","<img src="smilies/smile.gif" width="15" height="15" border="0" alt="">",$text);
     :
     : // Hier weitere Smilies
     :
   echo $smilie;
   }

Und der Aufruf:

<?php
 $text = ':) Dieses Smilie soll ersetzt werden...';
 smilie($text);
?>

Könnt ihr mir sagen wo mein Fehler liegt?

Thanks
PHP Newbe

  1. Hallo PHP Newbe,

    $smilie = eregi_replace(":)","<img src="smilies/smile.gif" width="15" height="15" border="0" alt="">",$text);

    Warum verwendest du eregi_replace? Ich kann keinen regulären Ausdruck oder die Notwendigkeit eines solchen erkennen.
    Du möchtest einen einfachen String ersetzen, also verwendet doch str_replace() (http://php3.de/str-replace). Beachte, das alle Parameter Arrays sein können.

    Grüße
      David

    --
    >>Nobody will ever need more than 640k RAM!<<
    1981 Bill Gates
    1. Warum verwendest du eregi_replace? Ich kann keinen regulären Ausdruck oder die Notwendigkeit eines solchen erkennen.

      Ja, und ergänzent dazu:
      Wenn man um einen regulären Ausdruck herum kommt, dann sollte man das auch machen. Reguläre Ausdrücke haben den Nachteil, daß sie recht langsam sind. Bei dieser einen Abfrage würde man das zwar noch nicht bemerken, aber man sollte sich angewöhnen, die String-Funktionen zu nutzen, wenn das möglich ist.
      Außerdem würde ich im Umgang mit regulären Ausdrücken dazu raten, die Perl-kompatiblen statt die POSIX-Funktionen zu nutzen, also die mit preg_ statt ereg_. Die sind schneller.

      rob

    2. Hallo David,

      Du möchtest einen einfachen String ersetzen, also verwendet doch str_replace() (http://php3.de/str-replace). Beachte, das alle Parameter Arrays sein können.

      Das habe ich gerade probiert. Das funktioniert aber auch nicht. Die Smilies werden einfach nicht ersetzt.

      Thanks
      PHP Newbe

      1. Hallo PHP Newbe,

        str_replace()
        Das habe ich gerade probiert. Das funktioniert aber auch nicht. Die Smilies werden einfach nicht ersetzt.

        Wie rufst du die Funktion denn auf? Gibt es Fehler?

        Grüße
          David

        --
        >>Nobody will ever need more than 640k RAM!<<
        1981 Bill Gates
        1. Hi David,

          Wie rufst du die Funktion denn auf? Gibt es Fehler?

          Fehler gibt es keine, aber mir ist gerade noch etwas aufgefallen:
          Es wird immer nur das Smilie ersetzt, welches in der Funktion am Ende steht, die anderen werden ignoriert.

          <?php
           function smilie($arg) {
            $smilie = str_replace(":confused:","<img src="/smilies/confused.gif" width="15" height="15" border="0" alt="">",$arg);
            $smilie = str_replace(":-)","<img src="/smilies/smile.gif" width="15" height="15" border="0" alt="">",$arg);
            $smilie = str_replace(":lol:","<img src="/smilies/lol.gif" width="15" height="15" border="0" alt="">",$arg);
            echo $smilie;
           }

          $text = ':confused: :lol: :-)';
           smilie($text);
          ?>

          In diesem Beispiel wird bei mir nur das ":lol:" ersetzt, weil dieses in der Funktion smilie() als letztes steht.

          Vielleicht weiß ja jemand, warum dies so ist?

          Thanks
          PHP Newbe

          1. hi,

            $smilie = str_replace(":confused:","<img src="/smilies/confused.gif" width="15" height="15" border="0" alt="">",$arg);
              $smilie = str_replace(":-)","<img src="/smilies/smile.gif" width="15" height="15" border="0" alt="">",$arg);
              $smilie = str_replace(":lol:","<img src="/smilies/lol.gif" width="15" height="15" border="0" alt="">",$arg);
              echo $smilie;

            In diesem Beispiel wird bei mir nur das ":lol:" ersetzt, weil dieses in der Funktion smilie() als letztes steht.

            Vielleicht weiß ja jemand, warum dies so ist?

            weil du $smilie immer wieder überschreibst, und dabei aber jedes mal wieder vom _original_-string $arg ausgehst.

            ersetze den letzten parameter von str_replace in allen außer dem ersten durch $smilie.

            gruß,
            wahsaga

            --
            "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
  2. ja komisch, die syntax scheint zu stimmen: string eregi_replace ( string Suchmuster, string Ersatz, string Zeichenkette), siehe http://de2.php.net/eregi_replace