Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1804 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  :o et :ouch:, comment les départager ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

:o et :ouch:, comment les départager ?

n°1591576
godbout
Génial.
Posté le 25-07-2007 à 23:57:35  profilanswer
 

J'me suis développé un p'tit blog il y a un an pour me mettre au php. C'était marrant, je m'en suis servi pendant 1 an et là j'veux y ajouter des smileys, mais j'en chie un brin :D
En fait, j'arrive pas à départager les smileys dans les cas suivants :
:o et :ouch:
:p et :pfff:  
etc...
 
A chaque fois, quand je fais le :ouch: ou le :pfff:, les deux premiers caractères (:o ou :p) sont échangés par les autres smileys.  
Comment faire pour éviter ça ?

mood
Publicité
Posté le 25-07-2007 à 23:57:35  profilanswer
 

n°1591579
WiiDS
20 titres en GC, 0 abandon, 0 DQ
Posté le 25-07-2007 à 23:59:22  profilanswer
 

Tu traites les :ouch: et :pfff: en premier, puis les :o et :p


Message édité par WiiDS le 25-07-2007 à 23:59:34

---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
n°1591582
godbout
Génial.
Posté le 26-07-2007 à 00:04:41  profilanswer
 

C'est ce que j'avais fait, mais ça ne marchait pas, en fait.
Dans un cas, j'ai que des :o, dans l'autre, j'ai des :ouch: foireux.  
Par contre, j'viens de trouver la solution. J'étais dessus depuis 4h, fallait que je poste pour trouver :D  
Dans le regex, j'ai donc mis un '(^:o)' au lieu de seulement ':o' et ça fonctionne !


Message édité par godbout le 26-07-2007 à 00:06:26
n°1591583
godbout
Génial.
Posté le 26-07-2007 à 00:06:02  profilanswer
 

Ah putain nan ca marche pas non plus comme ça, si le smiley est dans une phrase ça foire. Super :/

n°1591586
godbout
Génial.
Posté le 26-07-2007 à 00:24:37  profilanswer
 

Si je les mets dans l'ordre que tu me dis, ça devrait marcher, mais mon pb alors est là :
 

Code :
  1. $search = array( '/\[img]([^][<>]*)\[\/img]/',
  2.  '/\[url]([^][<>]*)\[\/url]/',
  3.  '/\[url=([^][<>]*)](.*)\[\/url]/',
  4.  '/:ouch:/',
  5.  '/:o/',
  6.  '/:pfff:/',
  7.  '/:p/',
  8.  '/;\)/'
  9. );
  10. $replace = array( '<img src="$1"></img>',
  11.  '<a href="$1">$1</a>',
  12.  '<a href="$1">$2</a>',
  13.  '<img src="../images/biggrin.gif" title=":D"></img>',
  14.  '<img src="../images/ouch.gif" title=":ouch:"></img>',
  15.  '<img src="../images/redface.gif" title=":o"></img>',
  16.  '<img src="../images/pfff.gif" title=":pfff:"></img>',
  17.  '<img src="../images/tongue.gif" title=":p"></img>',
  18.  '<img src="../images/wink.gif" title=";)"></img>'
  19. );
  20. $HTML = preg_replace( $search, $replace, $BBCode );


 
Le :ouch: est remplacé par le lien vers la bonne image, mais ensuite le title=":ouch:" est lui aussi remplacé par le lien vers l'image, et ça fout tout le bordel.

Message cité 1 fois
Message édité par godbout le 26-07-2007 à 00:24:52
n°1591588
WiiDS
20 titres en GC, 0 abandon, 0 DQ
Posté le 26-07-2007 à 00:30:34  profilanswer
 

godbout a écrit :

Si je les mets dans l'ordre que tu me dis, ça devrait marcher, mais mon pb alors est là :

 
Code :
  1. $search = array( '/\[img]([^][<>]*)\[\/img]/',
  2.  '/\[url]([^][<>]*)\[\/url]/',
  3.  '/\[url=([^][<>]*)](.*)\[\/url]/',
  4.  '/:ouch:/',
  5.  '/:o/',
  6.  '/:pfff:/',
  7.  '/:p/',
  8.  '/;\)/'
  9. );
  10. $replace = array( '<img src="$1"></img>',
  11.  '<a href="$1">$1</a>',
  12.  '<a href="$1">$2</a>',
  13.  '<img src="../images/biggrin.gif" title=":D"></img>',
  14.  '<img src="../images/ouch.gif" title=":ouch:"></img>',
  15.  '<img src="../images/redface.gif" title=":o"></img>',
  16.  '<img src="../images/pfff.gif" title=":pfff:"></img>',
  17.  '<img src="../images/tongue.gif" title=":p"></img>',
  18.  '<img src="../images/wink.gif" title=";)"></img>'
  19. );
  20. $HTML = preg_replace( $search, $replace, $BBCode );
 

Le :ouch: est remplacé par le lien vers la bonne image, mais ensuite le title=":ouch:" est lui aussi remplacé par le lien vers l'image, et ça fout tout le bordel.


Mets le mode Ungreedy ( U ) [:spamafote]

 

PS : Tu peux aussi mettre une légende plus explicite pour ton title et ca arrangerait le problème ;)


Message édité par WiiDS le 26-07-2007 à 00:31:24

---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
n°1591596
godbout
Génial.
Posté le 26-07-2007 à 01:32:01  profilanswer
 

J'connaissais pas le mode Ungreedy. J'ai essayé, ça n'a rien changé. Soit je ne sais pas l'utiliser, soit ça va pas sur le coup là :/
J'avais pensé à changer la légende mais bon, ça pue comme solution :D Mettre un truc du genre ": o u c h :, mais sans les espaces hein ;):p", j'trouve ça un peu naze.
Retour au début quoi, j'ai pas avancé depuis un bout de temps avec tout ça :/
Merci pour le coup de pouce en tout cas !


Message édité par godbout le 26-07-2007 à 01:32:14
n°1591598
KangOl
Profil : pointeur
Posté le 26-07-2007 à 01:40:25  profilanswer
 

forcer des espace avant et apres les smiley ? (+ gerer un smiley en debut/fin de phrase)

n°1591599
kalex
Posté le 26-07-2007 à 01:54:48  profilanswer
 

Pour ce genre de fonction, j'utiliserais plutôt preg_replace_callback.  
 
Rapidement, ça pourrait donner ça :

Code :
  1. $text = 'text :o, :ouch: !!!';
  2. function replace_sml($matches){
  3.   switch($matches[0]){
  4.     case ':o':
  5.       return '<img src="..." alt=":o">';
  6.       break;
  7.     case ':ouch:':
  8.       return '<img src="..." alt=":ouch:">';
  9.       break;
  10.     default:
  11.       return $matches[0];
  12.   }
  13. }
  14. echo preg_replace_callback('/(:\w+:?)/', 'replace_sml', $text);


n°1592003
godbout
Génial.
Posté le 26-07-2007 à 18:51:21  profilanswer
 

kalex, ta réponse est excellente, ça fonctionne merveilleusement bien !
Merci à tous !!!

mood
Publicité
Posté le 26-07-2007 à 18:51:21  profilanswer
 

n°1592024
godbout
Génial.
Posté le 26-07-2007 à 19:54:18  profilanswer
 

A vrai dire ça marche tellement bien que j'me demande même pourquoi mon "http://' marche bien, sans me remplacer le ":/" par le smiley qui devrait. C'est pas que ça me dérange, au contraire c'est niquel ! Mais j'me pose la question quand même :D

n°1592025
godbout
Génial.
Posté le 26-07-2007 à 19:56:04  profilanswer
 

Ah merde, en fait c'est le :/ qui marche pas :lol:
Tout ceux à base de parenthèses, slashes ou autres foirent.

 

Oh, ça marche.
Maintenant c'est donc bien le http qui ne marche plus :D


Message édité par godbout le 26-07-2007 à 20:04:42
n°1592032
kalex
Posté le 26-07-2007 à 20:16:22  profilanswer
 

Salut,
 
Dans l'expression régulière, j'ai mis un \w (tout caractère d'un mot), mais tu peux l'arranger autrement pour que ça capture exactement ce que tu souhaites. Par exemple, ton expression pourrait être :
 

/(:\w+:?|\;\)|:[\)\(])/

n°1592037
godbout
Génial.
Posté le 26-07-2007 à 20:29:29  profilanswer
 

Salut !
 
Voilà ce que j'ai mis en fait :  
 

'/:(\)|\w+|\(|\\\):?/


 
Du coup je récupère bien mes parenthèses et, en fait, l'antislash. J'ai préféré mettre un :\ plutôt qu'un :/, comme ça je galère pas avec mon http://. C'est un peu le bordel, chaque truc que j'implémente fout la merde ailleurs :D. Bon, du coup j'ai pas fait comme je voulais, mais ça m'évite de passer 3 jours et de perdre 550 000 cheveux pour un truc de rien du tout.
 
Sinon, autre petite question si ça te dérange pas :D
 
J'ai une autre regex qui est sensée me prendre les <img></img> pour me transformer les hauteurs/largeurs. Bref, le truc c'est que ça prend maintenant les smileys, ce que je voudrais éviter.
 
Ma regex est :  

'/\<img src=\"([^][<>]*)\"\>\<\/img\>/'


 
Comment faire pour lui indiquer de ne pas prendre les <img> qui ont un title ? J'ai essayé plusieurs combines, pas trouvé...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  :o et :ouch:, comment les départager ?

 

Sujets relatifs
Departager un partageComment départager a distance en ligne de commande
Plus de sujets relatifs à : :o et :ouch:, comment les départager ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)