Problème smiley avec PHP

Résolu
Bonjour,

Je suis entrain de développer un mini-chat en PHP permettant d'afficher des smileys. Pour cela j'utilise la fonction preg_replace();
Cela fonctionne parfaitement pour tous mes smileys sauf pour le coeur qui devrait s'afficher en tapant ceci : <3 probablement à cause de l'accolade !?

Comment corriger cette ligne pour faire fonctionner mon code ?
$msg = preg_replace("/<3/","<img src='coeur67.png' alt=\"<3\" >", $msg); 


A titre d'indication, la ligne suivante fonctionne pour afficher un coeur en tapant (L)

$msg = preg_replace("/\\(L\\)/","<img src='coeur67.png' alt=\"(L)\" >", $msg); 


Merci d'avance et bonne continuation ;)

Nicolas

8 réponses

  1. Et plutôt qu'afficher une image, pourquoi ne pas afficher le caractère ♥ qui s'obtient avec le code suivant :
    & hearts ;
    sans les espaces !
    1. En effet c'est une bonne idée ;) Merci de l'info !!
  2. Peut etre que $msg a été protégée avec htmlspecialchars ? dans ce cas il faut utiliser & lt ; (sans les espaces) au lieu de < ?
    1. Merci beaucoup !! la solution est effectivement celle-ci, j'avais protégé ma variable avec htmlspecialchars et c'est vrai que je n'avais plus pensé à ça...

      Merci encore ;)
  3. Même avec l'utilisation de dièses, toujours pas de résultat :(
    1. Salut,

      De mémoire il faut entourer le premier paramètre de preg_replace() avec des dièses (#) !

      Les parenthèses sont des métacaractères dans les expressions régulières. Je ne sais pas si c'est important mais échappe-les :

      \( \)
        au lieu de   ( )

      Mais j'ai relu la queston de départ : tu veux remplacer les coeurs <3 par une image. Pourquoi l'as-tu entouré de slashs ( / ) ?

      Ancienne ligne :
      $msg = preg_replace("/<3/","<img src='coeur67.png' />", $msg);
      Nouvelle ligne :
      $msg = preg_replace("#<3#","<img src='coeur67.png' />", $msg);
      ;-)
      1. Désolé du retard :s

        Voici le code en question :

        function smiley($msg) { 
        $msg = preg_replace("/<3/","<img src='coeur67.png' />", $msg); 
        $msg = preg_replace("/:D/","<img src='expr05.gif' alt=\":D\" />", $msg);
        $msg = preg_replace("/\\(L\\)/","<img src='coeur67.png' alt=\"(L)\" />", $msg); $msg = preg_replace("/\\(l\\)/","<img src='coeur67.png' alt=\"(l)\" />", $msg);
        return $msg; 
        } 


        Même en supprimant totalement l'attribut alt cela ne fonctionne pas, contrairement aux autres smileys...
        1. Merci de vos réponses,

          Cependant le problème persiste. Même en supprimant l'attribut alt (provisoirement) je n'arrive toujours pas à afficher l'image correspondante.
          1. Salut,
            Poste-nous ton code actuel, celui où tu as supprimé l'attribut Alt.
            ;-)
        2. Dans ton alt, remplace le < par <.

          Puis sache qu'une balise image soit être fermée :
          <img src=... alt=... />
          1. Salut,

            Il y a un problème dans la chaîne de remplacement.
            Au niveau de ta balise ALT , remplace les doubles quotes, par des simples.
            ça fonctionnera mieux :)

            ps: utilise un éditeur avec une coloration syntaxique.