str_replace() - Probleme mit Semikolon

  • Hi,

    ich bräuchte mal eure Hilfe zu einem Problem.

    Und zwar habe ich einen einfachen Code, der mir im Text einige Zeichen durch Smiley-Grafiken ersetzen soll. Das funktioniert soweit auch gut. Nur bei folgendem Code wird anders verfahren als erwartet:

    Code
    $text = str_replace(';)', '<img alt="[Emoticon]" src="'.EMOTICONS_DIR.'wink.gif" />', $text);

    Wenn ich nun in ein Textfeld (auf welches diese Funktion angewandt wird) folgendes schreibe...

    Code
    ")

    ... wird dieses ") wie folgt ersetzt ...

    Code
    "[IMG]http://www.timeofdarkness.de/inc/grafiken/smileys/2.gif[/IMG]

    Ich kann mir vorstellen, dass es etwas damit zutun hat, dass sich ein Semikolon innerhalb des Strings befindet. Für was das Semikolon in PHP steht wissen wir ja... Darum ersetzt er mir vermutlich auch nur die Klammer ) mit dem Smiley.

    Wie kann ich dieses Problem nun beheben? Ich will, dass das Semikolon als Bestandteil des Strings gesehen wird.

    MfG, Chris

  • Versuch mal, das gane mit strtr(); zu lösen, also so:

    PHP
    $smilys=array(
    ";)"=>"<img...",
    ":)"=>"<img..."); // u.s.w.
    $text=strtr($text, $smileys);

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Dannv ersuch mal, den String vorher zu addslashes()´n und vord er Audgabe/Speicherung wieder zu stripslashes()´n.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • Das funktioniert einwandfrei:

    PHP
    <?php
       $text = "Hallo ;) Welt ;)";
    
       $text = str_replace(";)", "<img src='./images/png.png' alt='PNG'>", $text);
    
       echo $text;
    ?>
  • Dannv ersuch mal, den String vorher zu addslashes()´n und vor der Audgabe/Speicherung wieder zu stripslashes()´n.

    Hab das probiert. Und genau das was ich vermutet habe ist passiert: Nichts. Immer noch das gleiche Problem.

    Das funktioniert einwandfrei [...]

    Klar. Das funktioniert. Aber ersetze mal ;) mit "), dann siehst du dass mein beschriebenes Problem wieder auftritt.

    Ich habe bereits probiert ;) mit etwas wie [Smiley] zu ersetzen. Jedoch ohne Erfolg.

    Code
    $text = str_replace(";)", "[Smiley2]", $text);

    MfG, Chris

  • Ähm, du meinst ;) mit ") ersetzen? Warum Sollte das nicht gehen?

    $text = str_replace(";)", "\")", $text);

    Und

    $text = str_replace(";)", "[Smiley2]", $text);

    funktioniert auch.

  • $text = stripslashes($_POST['name_von_textarea']);

    Und danach mit str_replace arbeiten.

  • Sorry, aber das mit den stripslashes() hatte ich schon so. Hab das alles in einer BBCode-Funktion.

    Bin mittlerweile aber selbst auf die Lösung gekommen. Am Anfang der Funktion wird bei mir htmlspecialchars() benutzt. Dadurch wird die Eingabe ...

    Code
    ")
    Code
    [COLOR=Black]
    [/COLOR]

    ... leider in ...

    Code
    &quot;)

    umgewandelt. Dadurch entsteht hinten dieser Smiley. Musste die Funktion nun etwas umbauen, dass es funktioniert.

    Trotzdem danke für eure Hilfe!

    MfG, Chris