Thomas: str_replace

Hallo zusammen

Ich habe ein Gästebuch gebaut, und möchte nun, dass bestimmte Worte ([lachen],[weinen],[böse]) durch smileys ersetz werden.

Habe das so gelöst,

  
      $array_1 = array("[lachen]","[weinen]","[böse]");  
      $array_2 = array("<img src=img/smileys/1.gif>","<img src=img/smileys/2.gif>","<img src=img/smileys/3.gif>");  
  
  
      for($x=0;$x<18;$x++){  
      $text = str_replace($array_1[$x],$array_2[$x],"$dsatz[text]");  
      }  
  
      echo "<p>" . $text . "</p>";  
  

Was ist hier falsch..? denn die [böse] bleiben einfach stehen und es geschiet nichts.

lg thomas

  1. Moin Moin!

    Was ist hier falsch..? denn die [böse] bleiben einfach stehen und es geschiet nichts.

    Umlaut-Kodierung (UTF-8, ISO-8859-1, HTML Entity)?

    Du erzeugst übrigens ungültiges HTML. Attribut-Werte sollten unbedingt in Quotes stehen (Zahlen dürfen auch ohne Quotes stehen), und das IMG-Tag erfordert zwingend ein ALT-Attribut.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
    1. Hallo,

      Du erzeugst übrigens ungültiges HTML. Attribut-Werte sollten unbedingt in Quotes stehen (Zahlen dürfen auch ohne Quotes stehen)

      Fast, es dürfen zumindest alle zahlen und buchstaben ohne Quotes stehen auch ein Punkt und einige andere. Bei seinem Beispiel macht aber der Slash alles kaputt. Ich hab gerade das hier erfolgreich validieren lassen:

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
                  "http://www.w3.org/TR/html4/loose.dtd">  
      <title>HTML validation</title>  
      <img src=bar.png alt=test>  
      
      

      Jeena

      --
      Gentoo Serveruhrzeit automatisch einstellen | Jlog | Gourmetica Mentiri
  2. Hello,

    $array_1 = array("[lachen]","[weinen]","[böse]");
          $array_2 = array("<img src=img/smileys/1.gif>","<img src=img/smileys/2.gif>","<img src=img/smileys/3.gif>");

    for($x=0;$x<18;$x++){
          $text = str_replace($array_1[$x],$array_2[$x],"$dsatz[text]");
          }

    echo "<p>" . $text . "</p>";

    Was ist hier falsch..? denn die [böse] bleiben einfach stehen und es geschiet nichts.

    Du benötigst keine Schleife.
    Str_Replace() hat eine "eingebaute Schleife" für Arrays.
    http://de2.php.net/manual/en/function.str-replace.php

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

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

  3. Moin,

    Ich habe ein Gästebuch gebaut, und möchte nun, dass bestimmte Worte ([lachen],[weinen],[böse]) durch smileys ersetz werden.

    Was hältst Du denn hier von:

      
    $smilies = array();  
    $smilies['[lachen]'] = "/foo/lachen.gif";  
    $smilies['[weinen]'] = "/foo/weinen.gif";  
    $smilies['[boese]']  = "/foo/boese.gif";  
    ...  
    
    

    Dann den Text entsprechend bearbeiten:

      
    $string = smiliesEinfuegen($string, $smilies);  
    
    

    Die entsprechende Funktion:

      
    function smiliesEinfuegen($string, $smilies) {  
        foreach($smilies as $code => $value) {  
            $smilie = "<img src=\"$value\" alt=\"$code\" />";  
            $string = str_replace($code, $smilie, $string);  
        }  
        return($string);  
    }  
    
    

    Das hätte den Vorteil, dass Du nur einen Array brauchst, und es deutlich übersichtlicher mit den Codes und den GrafikURIs ist und Du gleich ein passendes alt Attribut generierst.
    Ist nicht getestet, sollte aber funktionieren.

    mit freundlichen Grüßen
    Ulrich

    --
    Teiltransparente Bereiche
    selfcode: sh:| br:> ie:% mo:) va:) de:] zu:) fl:( ss:| ls:[
    um-fritz.de