Sp33dy G0nz4l3s: str_replace

Hi, ich möchte in meinem Kommentarscript :) Smilies mit einem Bild ersetzen. Habe es so versucht:

echo "<div id="comment_text">" . $kommentar = nl2br(htmlspecialchars($row["Kommentar"])) . $kommentar = str_replace(":)", "<img src="http://www.cs-erweiterungen.de/images/smilies/smile.gif">", $kommentar) . "</div></div>\n";

Es geht leider nicht. Es sieht sehr komisch aus:

http://www.cs-erweiterungen.de/scripts/viewcomments.php

Kann mir jemand helfen?
Danke!

  1. Hi, ich möchte in meinem Kommentarscript :) Smilies mit einem Bild ersetzen. Habe es so versucht:

    echo "<div id="comment_text">" . $kommentar = nl2br(htmlspecialchars($row["Kommentar"])) . $kommentar = str_replace(":)", "<img src="http://www.cs-erweiterungen.de/images/smilies/smile.gif">", $kommentar) . "</div></div>\n";

    Es geht leider nicht. Es sieht sehr komisch aus:

    http://www.cs-erweiterungen.de/scripts/viewcomments.php

    Kann mir jemand helfen?
    Danke!

    Dein echo Befehl sieht nicht schön aus.
    (In $kommentar steht der Ursprungskommentar aus der DB?!)
    Probier es mal so:

      
    $kommentar = str_replace(":)", "<img src=\"http://www.cs-erweiterungen.de/images/smilies/smile.gif\">", nl2br(htmlspecialchars($row["Kommentar"])));  
      
    echo "<div id=\"comment_text\">" . $kommentar . "</div></div>\n";  
    
    

    Den Code habe ich nicht getestet!

    1. Danke geht super :)

      Noch eine Frage:

      Ist das so nicht richtig?

      $smilie = ":)";
      $smilie = ";)";
      $smilie = ":(";
      $link = "<img src="http://www.cs-erweiterungen.de/images/smilies/smile.gif">";
      $link = "<img src="http://www.cs-erweiterungen.de/images/smilies/wink.gif">";
      $link = "<img src="http://www.cs-erweiterungen.de/images/smilies/frown.gif">";

      $kommentar = str_replace($smilie, $link, nl2br(htmlspecialchars($row["Kommentar"])));
        echo "<div id="comment_text">" . $kommentar . "</div></div>\n";

      Weil so hab ich es in einem Buch gesehen.. geht aber nicht.

      1. Danke geht super :)

        Noch eine Frage:

        Ist das so nicht richtig?

        $smilie = ":)";
        $smilie = ";)";
        $smilie = ":(";
        $link = "<img src="http://www.cs-erweiterungen.de/images/smilies/smile.gif">";
        $link = "<img src="http://www.cs-erweiterungen.de/images/smilies/wink.gif">";
        $link = "<img src="http://www.cs-erweiterungen.de/images/smilies/frown.gif">";

        $kommentar = str_replace($smilie, $link, nl2br(htmlspecialchars($row["Kommentar"])));
          echo "<div id="comment_text">" . $kommentar . "</div></div>\n";

        Weil so hab ich es in einem Buch gesehen.. geht aber nicht.

        Naja für das letzte Smilie funktioniert es vll. ":("
        Du setzt oben $smilie 3x und $link auch. Die vorherige Wert wird durch = gelöscht.
        Du müsstest eine Schleife machen:

          
        $smilie = array( ':)', ';)', ':(' );  
        $link = array('<img src="http://www.cs-erweiterungen.de/images/smilies/smile.gif">',  
        '<img src="http://www.cs-erweiterungen.de/images/smilies/wink.gif">',  
        '<img src="http://www.cs-erweiterungen.de/images/smilies/frown.gif">');  
          
        // Nun hast du 2 Arrays, die müssen jetzt durchlaufen werden:  
        // smilie und link _müssen_ für folgenden code gleich viele Elemente haben!  
        for($i = 0; $i < count($smilie); $i++) {  
         echo "<div id=\"comment_text\">" . str_replace($smilie[$i], $link[$i], nl2br(htmlspecialchars($row["Kommentar"])));  
        }  
        
        

        Du hast da aber ein sehr lehrreiches Buch ;-)

        1. Stimmt das so? Ich bekomme das einfach nicht zu laufen. Liegt das an der while Schleife? Ich geh jetzt schlafen...

          $smilie = array( ':)', ';)', ':(' );
          $link = array('<img src="http://www.cs-erweiterungen.de/images/smilies/smile.gif">',
          '<img src="http://www.cs-erweiterungen.de/images/smilies/wink.gif">',
          '<img src="http://www.cs-erweiterungen.de/images/smilies/frown.gif">');

          // while-Schleife Anfang
          while($row = mysql_fetch_assoc($result2)) {
            echo "<div id="comment"><div id="comment_top"><b><span class="comment_date">" . $row["Datum"] . "</span>#".$nr." ";
            if (!empty ($row["Homepage"])) { echo "<a href="" . htmlspecialchars($row["Homepage"]) . "" target="_blank">" .
            htmlspecialchars($row["Name"]) . "</a></b></div>"; }
             else { echo htmlspecialchars($row["Name"]) . "</b></div>"; }

          HIERSCHAUEN:
          ------------------------------------------------------

          for($i = 0; $i < count($smilie); $i++) {
            $kommentar = str_replace($smilie[$i], $link[$i], nl2br(htmlspecialchars($row["Kommentar"])));
          }
            echo "<div id="comment_text">" . $kommentar . "</div></div>\n";

          $nr++;
          } // while Ende

          1. Hello,

            Stimmt das so? Ich bekomme das einfach nicht zu laufen. Liegt das an der while Schleife? Ich geh jetzt schlafen...

            $smilie = array( ':)', ';)', ':(' );
            $link = array('<img src="http://www.cs-erweiterungen.de/images/smilies/smile.gif">',
            '<img src="http://www.cs-erweiterungen.de/images/smilies/wink.gif">',
            '<img src="http://www.cs-erweiterungen.de/images/smilies/frown.gif">');

            // while-Schleife Anfang
            while($row = mysql_fetch_assoc($result2)) {
              echo "<div id="comment"><div id="comment_top"><b><span class="comment_date">" . $row["Datum"] . "</span>#".$nr." ";
              if (!empty ($row["Homepage"])) { echo "<a href="" . htmlspecialchars($row["Homepage"]) . "" target="_blank">" .
              htmlspecialchars($row["Name"]) . "</a></b></div>"; }
               else { echo htmlspecialchars($row["Name"]) . "</b></div>"; }

            HIERSCHAUEN:

            das sollte eigentlich genügen, wenn ich Deine Intention richtig verstanden habe.
            str_replace aht sozusagen eine  eingebaute Schleife. Das ist bequem.

            {
                $kommentar = str_replace($smilie, $link, nl2br(htmlspecialchars($row["Kommentar"])));
              }

            echo "<div id="comment_text">" . $kommentar . "</div></div>\n";

            $nr++;
            } // while Ende

            Harzliche Grüße vom Berg
            http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau

          2. Hi!

            $link = array('<img src="http://www.cs-erweiterungen.de/images/smilies/smile.gif">',
            '<img src="http://www.cs-erweiterungen.de/images/smilies/wink.gif">',
            '<img src="http://www.cs-erweiterungen.de/images/smilies/frown.gif">');

            Für das Image-Tag ist das Attribut "alt" zwingend vorgeschrieben. Du kannst es leer lassen, wenn du willst (was ich aber in keinem Fall empfehlen würde). Du darfst es aber nicht weglassen, wenn du korrekten Code schreiben willst.

            Ich bekomme das einfach nicht zu laufen.

            Was bedeutet das?
            Wenn du eine Fehlermeldung erhälst, dann poste diese hier.

            Schöner Gruß,
            rob

      2. Hello,

        $smilie[] = ":)";
         $link[] = "<img src="http://www.cs-erweiterungen.de/images/smilies/smile.gif">";

        $smilie[] = ";)";
         $link[] = "<img src="http://www.cs-erweiterungen.de/images/smilies/wink.gif">";

        $smilie[] = ":(";
         $link[] = "<img src="http://www.cs-erweiterungen.de/images/smilies/frown.gif">";

        Das Umsortieren habe ich nur gemacht, damit Du siehst, was zusammengehört.
        str_replace verarbeitet Arrays, wobei die Elemente über den Index korrespondiereen.
        Du kannst die Indexe auch direkt zuweisen.

        $kommentar = str_replace($smilie, $link, nl2br(htmlspecialchars($row["Kommentar"])));
          echo "<div id="comment_text">" . $kommentar . "</div></div>\n";

        Weil so hab ich es in einem Buch gesehen.. geht aber nicht.

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

      3. Hi!

        Ist das so nicht richtig?

        $smilie = ":)";
        $smilie = ";)";
        $smilie = ":(";

        Du überschreibst hier ja jedesmal wieder den Inhalt von $smilie.

        $link = "<img src="http://www.cs-erweiterungen.de/images/smilies/smile.gif">";
        $link = "<img src="http://www.cs-erweiterungen.de/images/smilies/wink.gif">";
        $link = "<img src="http://www.cs-erweiterungen.de/images/smilies/frown.gif">";

        Genau wie du hier jedesmal wieder den Inhalt von $link überschreibst.

        Vielleicht solltest du ein Array einsetzen..?

        $kommentar = str_replace($smilie, $link, nl2br(htmlspecialchars($row["Kommentar"])));
          echo "<div id="comment_text">" . $kommentar . "</div></div>\n";

        Warum zweimal das schliessende </div>?

        Schöner Gruß,
        rob