Problème smiley avec PHP

Résolu/Fermé
nicos91 - 30 juil. 2011 à 14:50
 nicos91 - 16 août 2011 à 22:06
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



A voir également:

8 réponses

Luxerails Messages postés 159 Date d'inscription jeudi 14 avril 2011 Statut Membre Dernière intervention 24 décembre 2012 41
8 août 2011 à 22:25
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 ;)
0
Creutzou Messages postés 550 Date d'inscription lundi 17 mai 2010 Statut Membre Dernière intervention 30 mai 2013 30
30 juil. 2011 à 15:05
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.
0
mcfly10 Messages postés 1052 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 12 avril 2022 238
30 juil. 2011 à 16:15
Dans ton alt, remplace le < par <.

Puis sache qu'une balise image soit être fermée :
<img src=... alt=... />
0
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.
0
Bilow Messages postés 1022 Date d'inscription samedi 21 août 2010 Statut Membre Dernière intervention 2 août 2015 117
30 juil. 2011 à 18:17
Salut,
Poste-nous ton code actuel, celui où tu as supprimé l'attribut Alt.
;-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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...
0
Bilow Messages postés 1022 Date d'inscription samedi 21 août 2010 Statut Membre Dernière intervention 2 août 2015 117
2 août 2011 à 14:03
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);
;-)
0
Même avec l'utilisation de dièses, toujours pas de résultat :(
0
badplayer Messages postés 3 Date d'inscription mardi 16 août 2011 Statut Membre Dernière intervention 16 août 2011
Modifié par badplayer le 16/08/2011 à 14:48
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 !
0
En effet c'est une bonne idée ;) Merci de l'info !!
0