[PHP] Remplacer dans un texte des smileys par des tags <img ... /> ?

Remplacer dans un texte des smileys par des tags <img ... /> ? [PHP] - PHP - Programmation

Marsh Posté le 20-03-2004 à 12:21:01    

Bonjour,
 
Je voudrais remplacer dans une chaine de caractères des smileys par des tags <img src=... border=0 />.
 
Je pense que le mieux est de faire deux tableaux comme ceci :


$codes_smileys = array(":)", ":D", ":(" );
$noms_smileys = array("sourit", "rit", "triste" );


 
... ensuite si je fais ça


$message = "Hop :) Voilà de beaux smileys :D"
$message = str_replace($codes_smileys, $noms_smileys, $message);


 
... les smileys sont bien remplacés par leur nom. Le problème est que je n'arrive pas à insérer  "<img src=" avant le nom et " border=0 />" après.
 
J'ai regardé du coté de ereg_replace et preg_replace, mais je n'y arrive toujours pas :/
 
Quelqu'un a une idée ?
Merci :)
 
PS : J'aimerais si possible éviter d'avoir à modifier le tableau $noms_smileys pour qu'il contienne les tags en entier.


---------------
Un site web qu'il est beau (v2.0)
Reply

Marsh Posté le 20-03-2004 à 12:21:01   

Reply

Marsh Posté le 20-03-2004 à 12:26:50    

Code :
  1. $noms_smileys = array("<img src=\"adresse.gif\" alt=\"smiley\" title=\"sourit\" />", ...);


Message édité par Hermes le Messager le 20-03-2004 à 12:27:04
Reply

Marsh Posté le 20-03-2004 à 13:24:02    

Merci mais c'est justement ce que je voudrais éviter de faire.
 
(Parce que si je veux modifier des attributs du tag IMG plus tard il faudra que je modifie toutes les entrées du tableau, et puis ça fait beaucoup de code redondant)


---------------
Un site web qu'il est beau (v2.0)
Reply

Marsh Posté le 20-03-2004 à 13:27:07    

max2048 a écrit :

Merci mais c'est justement ce que je voudrais éviter de faire.
 
(Parce que si je veux modifier des attributs du tag IMG plus tard il faudra que je modifie toutes les entrées du tableau, et puis ça fait beaucoup de code redondant)


 
Il n'y a pas d'autres méthodes, et si plus tard tu veux modifier les entrées du tableaux, et bien il faut par exemple établir une liste sur un fichier ou encore utiliser une BDD et remplir ton tableau en fonction des entrées listées...

Reply

Marsh Posté le 20-03-2004 à 13:28:23    

Avec les expressions régulières c'est pas possible ?
(j'en sais absolument rien, je demande, c'est tout)


---------------
Un site web qu'il est beau (v2.0)
Reply

Marsh Posté le 20-03-2004 à 13:35:59    

max2048 a écrit :

Avec les expressions régulières c'est pas possible ?
(j'en sais absolument rien, je demande, c'est tout)


 
Ben qu'est-ce que ça va changer d'utiliser une expreg ?  :heink:

Reply

Marsh Posté le 20-03-2004 à 14:07:26    

max2048 a écrit :


... ensuite si je fais ça


$message = "Hop :) Voilà de beaux smileys :D"
$message = str_replace($codes_smileys, $noms_smileys, $message);




 
et pourquoi ne pas faire ça :
 
$message = str_replace($codes_smileys, '<img src="http://...'.$noms_smileys.'.gif" border="0">', $message);
 
tu ne modifies pas tout ton tableau ;)

Reply

Marsh Posté le 20-03-2004 à 14:14:26    

Vinx a écrit :


 
et pourquoi ne pas faire ça :
 
$message = str_replace($codes_smileys, '<img src="http://...'.$noms_smileys.'.gif" border="0">', $message);
 
tu ne modifies pas tout ton tableau ;)


 
oui bien sûr, ça lui évitera d'avoir le <img src qui se répète, mais son problème n'est pas là. Il veut pouvoir mettre à jour le contenu du tableau :
 
Donc il faut que par exemple il fasse :
 
$table_smiley = array("$smiley1",$smiley2', etc...);
 
OU encore :  
 
Un bête boucle qui entoure un $smiley[$i] = $entrée_de_la_bdd;
 
etc...

Reply

Marsh Posté le 20-03-2004 à 16:53:50    

hermes le messager> Bon alors apparemment je me suis mal expliqué. Je veux juste éviter de répéter les "<img src=... alt=smiley border=0 />" dans mon tableau, rien de plus.
 
Vinx> C'est exactement ça que je veux faire, seulement ça ne marche pas. Quand j'utilise ton code :
 


$message = "Ceci est un message :) contenant des smileys :D";
$codes_smileys = array(":)", ":D", ":(" );
$noms_smileys = array("sourit", "rit", "triste" );
 
$message = str_replace($codes_smileys, '<img src="images/smileys/'.$noms_smileys.'.gif" border="0">', $message);


 
Ca me renvoie :
 

Ceci est un message <img src="images/smileys/Array.gif" border="0"> contenant des smileys <img src="images/smileys/Array.gif" border="0">


 
Au lieu de :
 

Ceci est un message <img src="images/smileys/sourit.gif" border="0"> contenant des smileys <img src="images/smileys/rit.gif" border="0">


 
 
Merci à vous deux en tout cas :)
(Tiens, un smiley qui fonctionne :o )


---------------
Un site web qu'il est beau (v2.0)
Reply

Marsh Posté le 21-03-2004 à 22:34:44    

au pire met dans 2 variables le debut et la fin,
et recreer toi un tableau avec une boucle foreach qui va contenir ce que tu veux pas mettre  
 
exemple :  

Code :
  1. $debut = ' <img src="images/smileys/';
  2. $fin = 'border="0">';
  3. et foreach ($noms_smileys, as $key=>$value)
  4. $nom_smiley[$key] = $debut.$value.$fin;


et ensuit tu fait ton replace  
 
comme ca si tu veux modifier t'as a le faire qu'ins fois  
 

Reply

Marsh Posté le 21-03-2004 à 22:34:44   

Reply

Marsh Posté le 21-03-2004 à 22:44:31    

Oui mais ça revient à créer le "gros" tableau que je voulais éviter... :-/
 
M'enfin merci :)
 


---------------
Un site web qu'il est beau (v2.0)
Reply

Marsh Posté le 26-09-2012 à 18:44:25    

Désolé de faire ce que l'on appel détérer le topic mais il  parle exactement de ce que je souhaite faire et de toute facon les forums sont là pour rendre service donc pourquoi ne pas me rendre service actuellement ;)
Revenons en au code voici le code que j'ai fais :
function smileys($post) //remplacement d'un code smiley par une image gif
 {
  $codes_smileys=array(
   ":)",
   "=)",
   ":D",
   "=D",
   ":(",
   "=(",
   "lol"
   );  
  $images_smileys=array(
   "happy.gif",
   "happy.gif",
   "enjoy.gif",
   "enjoy.gif",
   "sad.gif",
   "sad.gif",
   "lol.gif"
   );  
  return str_replace($codes_smileys, '<img src="template/images/smileys/'.$images_smileys.'" border="0">', $post);
 }
Et l'appel de ma fonction dans la page php :
$datas['content']=smileys(strip_tags(nl2br($datas['content']), '<br /><br>'));
Seulement lorsque j'affiche la page il y a bien des image mais corrompus qui s'afiche au lieu du code du smiley donc ca va mais en faisans identifier élément j'apperçois comme un membre plus haut que l'adresse de l'image est de ce type :
<img src="template/images/smileys/Array" border="0">
La fonction str_replace est capable de trouver un code du texte contenu dans la variable tableau mais ne serai pas capable en revanche de trouver l'équivalent en choisissant le bonne indice de la variable?

Reply

Marsh Posté le 26-09-2012 à 19:18:58    

je crois avoir une réponse à ce problème, la concaténation de la variable uimage_smileys fais buguer la fonction et affiche Array au lieu de la valeur de l'indice concerné ;) donc obligation de mettre le code html img dans le tableau, pas le choix..

Reply

Marsh Posté le 02-10-2012 à 23:23:34    

Tu peux faire une regexp, ça sera plus lisible, mais je ne te le conseille pas car c'est plus lent.


---------------
Directeur Technique (CTO)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed