Regex et smilies...

Regex et smilies... - PHP - Programmation

Marsh Posté le 30-08-2002 à 04:20:30    

Hello.
 
Je me sers de ce bout de code pour parser les smilies dans une chaîne de caractères :
 
 

Code :
  1. while(list($code,$image_smiley)=mysql_fetch_row($res_smilies))
  2. {
  3. $search[$k]="/$code/si";
  4. $search[$k]=addcslashes($search[$k],"?()[]" );
  5. $remplace[$k]=" <img src=\"".$image_smiley."\" border=\"0\" alt=\"".$code."\"> ";
  6. $k++;
  7. }
  8. $texte=preg_replace($search,$remplace,$texte,$nb_smilies);


 
On va dire que ce code cherche d'abord le smilie %ouch%, et ensuite le smilie %o (ils sont dans cette ordre quand je vais les chercher dans la BDD) (je remplace les : par des %)
 
Le problème c'est que par exemple, si j'ai un smiley %ouch% dans la chaîne de caractère, il va me sortir ça au final :
 
:ouch:uch:">
 
Est-ce que quelqu'un aurait une petite idée pour contourner le problème ? Merci ;)

Reply

Marsh Posté le 30-08-2002 à 04:20:30   

Reply

Marsh Posté le 30-08-2002 à 09:53:33    

myisamchk -a MYI a écrit a écrit :

Hello.
 
Je me sers de ce bout de code pour parser les smilies dans une chaîne de caractères :
 
 

Code :
  1. while(list($code,$image_smiley)=mysql_fetch_row($res_smilies))
  2. {
  3. $search[$k]="/$code/si";
  4. $search[$k]=addcslashes($search[$k],"?()[]" );
  5. $remplace[$k]=" <img src=\"".$image_smiley."\" border=\"0\" alt=\"".$code."\"> ";
  6. $k++;
  7. }
  8. $texte=preg_replace($search,$remplace,$texte,$nb_smilies);


 
On va dire que ce code cherche d'abord le smilie %ouch%, et ensuite le smilie %o (ils sont dans cette ordre quand je vais les chercher dans la BDD) (je remplace les : par des %)
 
Le problème c'est que par exemple, si j'ai un smiley %ouch% dans la chaîne de caractère, il va me sortir ça au final :
 
:ouch:uch:">
 
Est-ce que quelqu'un aurait une petite idée pour contourner le problème ? Merci ;)




 
 :hello: , je vais pas répondre directement à ta question mais bon, moi j'utilise cette fonction pour les smiley et pas de pb :


function smiley($texte){
$sql5="select * from smiley";
$resu5=mysql_query($sql5);
while($nb=mysql_fetch_array($resu5)){
$texte=eregi_replace("$nb[code]",
       "<img src=\"./smiley/$nb[chemin]\" title=\"$nb[code]\">",
       $texte);
}
return($texte);
}


@+


---------------
All we need is a soul revolution
Reply

Marsh Posté le 30-08-2002 à 11:56:40    

il te suffit de les trier en ordre descendant (DESC) et non ASC par défaut ;)
ainsi :ouch: sera remplacé avant :o s'il est présent


---------------
...oups kernel error...
Reply

Marsh Posté le 30-08-2002 à 12:47:39    

Kayasax > je vais essayer, merci ;)
 
Ethernal > le problème, c'est que c'est déjà trié comme ça ;) La fonction remplace tous les %ouch% de la chaîne de caractères, et ensuite elle refait un passage pour le %o. Et vu que la l'attribut alt de la balise img contient la chaîne %ouch%, je te laisses imaginer le problème ;)

Reply

Marsh Posté le 30-08-2002 à 13:06:34    

kayasax a écrit a écrit :

 
 
 :hello: , je vais pas répondre directement à ta question mais bon, moi j'utilise cette fonction pour les smiley et pas de pb :


function smiley($texte){
$sql5="select * from smiley";
$resu5=mysql_query($sql5);
while($nb=mysql_fetch_array($resu5)){
$texte=eregi_replace("$nb[code]",
       "<img src=\"./smiley/$nb[chemin]\" title=\"$nb[code]\">",
       $texte);
}
return($texte);
}


@+



kayasal, ca a l'air super ta fonction.
Je vais me baser dessus pour les smilies et les mise en forme de caratère de mon site mais ca sera un peu plus complexe au niveau de la requête vu que je vais faire des groupes de codes diférents afin que certains soient utilisé que dans les news, d'autres au niveau des news, du forum et du chat, ...
 
MErci, pour ce bout de code que j'arrive à comprendre sans problème. ;)

Reply

Marsh Posté le 30-08-2002 à 15:45:35    

myisamchk -a MYI a écrit a écrit :

 
Ethernal > le problème, c'est que c'est déjà trié comme ça ;) La fonction remplace tous les %ouch% de la chaîne de caractères, et ensuite elle refait un passage pour le %o. Et vu que la l'attribut alt de la balise img contient la chaîne %ouch%, je te laisses imaginer le problème ;)




 
exact j'avais le même, j'ai supprimé le alt ;)


---------------
...oups kernel error...
Reply

Marsh Posté le 30-08-2002 à 15:47:39    

omega2 a écrit a écrit :

kayasal, ca a l'air super ta fonction.
Je vais me baser dessus pour les smilies et les mise en forme de caratère de mon site mais ca sera un peu plus complexe au niveau de la requête vu que je vais faire des groupes de codes diférents afin que certains soient utilisé que dans les news, d'autres au niveau des news, du forum et du chat, ...




 
évite...
le mieux c'est str_replace.
si tu veux limiter le nombre de smileys remplacer pour ne pas surcharger une page, utilise preg_replace.
 
Mais en aucun cas eregi_replace, c'est le plus lent et ça n'apporte rien de plus.
enfin, moi je dis ça, je dis rien, chacun fait ce qu'il veut  :ange:


---------------
...oups kernel error...
Reply

Marsh Posté le 30-08-2002 à 16:18:30    

ethernal a écrit a écrit :

 
 
évite...
le mieux c'est str_replace.
si tu veux limiter le nombre de smileys remplacer pour ne pas surcharger une page, utilise preg_replace.
 
Mais en aucun cas eregi_replace, c'est le plus lent et ça n'apporte rien de plus.
enfin, moi je dis ça, je dis rien, chacun fait ce qu'il veut  :ange:  



Un doute m'envahis tout à coup.
Moi, j'ai mon site en php3 et d'après la doc de nexen, str_replace ne peut prendre des tableaux comme paramêtre qu'à partir de php4.
Avec eregi_replace et preg_replace, c'est les même limitations ou pas?
 
EDIT : Pour preg_replace j'ai trouvé l'info, il accepte des paramêtres sous formes de tableaux. Pour eregi_replace, je n'ai aps encore trouvé d'info sur ce problème.


Message édité par omega2 le 30-08-2002 à 16:21:06
Reply

Marsh Posté le 30-08-2002 à 18:19:24    

str_replace ne prends pas de tableau (même sur ma version 4.2.2)
mais c pas grave, tu fais une boucle, c'est la même chose.
 
eregi_replace pas d'info stipulant qu'il accepte des tableau, donc il n'en accepte pas.


Message édité par ethernal le 30-08-2002 à 18:20:10

---------------
...oups kernel error...
Reply

Marsh Posté le 30-08-2002 à 19:03:05    

ethernal a écrit a écrit :

str_replace ne prends pas de tableau (même sur ma version 4.2.2)mais c pas grave, tu fais une boucle, c'est la même chose.
 
eregi_replace pas d'info stipulant qu'il accepte des tableau, donc il n'en accepte pas.




 
Hein ?
 
Mon code de formatage des smilies fonctionne parfaitement avec un seul str_replace et deux arrays?
 

Citation :

In PHP 4.0.5 and later, every parameter to str_replace() can be an array.  
 
If subject is an array, then the search and replace is performed with every entry of subject, and the return value is an array as well.  
 
If search and replace are arrays, then str_replace() takes a value from each array and uses them to do search and replace on subject. If replace has fewer values than search, then an empty string is used for the rest of replacement values. If search is an array and replace is a string; then this replacement string is used for every value of search.


 
 
 


---------------
Faux & usage de faux ¤ Machins roses ¤ ASCIImage ¤ HFR Enhance v0.8.6
Reply

Marsh Posté le 30-08-2002 à 19:03:05   

Reply

Marsh Posté le 31-08-2002 à 01:31:57    

Freekill a écrit a écrit :

 
 
Hein ?
 
Mon code de formatage des smilies fonctionne parfaitement avec un seul str_replace et deux arrays?
 




 
j'ai du mal tester alors... ou faire une erreur qq part, mea culpa  :jap:


---------------
...oups kernel error...
Reply

Sujets relatifs:

Leave a Replay

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