[PHP] Replacer un mot dans un texte avec des accents?

Replacer un mot dans un texte avec des accents? [PHP] - PHP - Programmation

Marsh Posté le 09-08-2004 à 16:08:48    

Bonjour,  
 
J'utilise la fonction preg_replace() pour mettre un mot en gras dans un texte. Grâce à l'option "i", elle est bien insensible à la casse, mais je ne trouve pas comment faire pour qu'elle soit également insensible aux accents.
 
Voilà le code que j'utilise:

Code :
  1. preg_replace("/(".$mot." )/i", "<b>$1</b>", $texte);


 
Si j'ai

$mot = "léon";

et

$texte = "Je m'appelle Léon..."

, il n'y a pas de problème, mais si j'ai

$mot = "leon"

le mot n'est pas remplacé?
 
Comment faire pour que ça marche aussi avec les accents, mais sans les remplacer? (MySQL le fait car lorsqu'on cherche "%leon%" elle renvoie tous les textes où apparaît leon, léon, LéOn etc...
 
edit: Le message s'envoie tout seul si on fait TAB+enter  :fou:


Message édité par Leffe Triple le 09-08-2004 à 16:13:19
Reply

Marsh Posté le 09-08-2004 à 16:08:48   

Reply

Marsh Posté le 09-08-2004 à 16:29:02    

Ben je ne crois pas que tu puisses gérer cela directement.
 
J'aurais tendance à faire un petite fonction du genre

Code :
  1. function accents($chaine)
  2.     {
  3.     return (strtolower(strtr( $chaine, "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",
  4.     "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn" ) ));
  5.     }


 
Ensuite du fait
$mots=accents($mots) et ensuite tu applique ton preg_replace à $mots.
 
(Dans ce cas tu n'as plus besoin du "i" puisque c'est déjà traité par la fonction, mais bon tu fais comme tu le sens, hein :) )

Reply

Marsh Posté le 09-08-2004 à 16:43:29    

deliriumtremens a écrit :

Ben je ne crois pas que tu puisses gérer cela directement.
 
J'aurais tendance à faire un petite fonction du genre

Code :
  1. function accents($chaine)
  2.     {
  3.     return (strtolower(strtr( $chaine, "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",
  4.     "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn" ) ));
  5.     }


 
Ensuite du fait
$mots=accents($mots) et ensuite tu applique ton preg_replace à $mots.
 
(Dans ce cas tu n'as plus besoin du "i" puisque c'est déjà traité par la fonction, mais bon tu fais comme tu le sens, hein :) )


 
 
Merci de ta réponse,
 
J'avais aussi pensé à faire quelque-chose comme ça, mais alors le problème c'est qu'il va me remplacer
 
"Je m'appelle Léon" par "Je m'appelle leon" et non "Je m'appelle Léon"...
 
De plus cette fonction ne fonctionnera que si j'applique ta fonction à $mot et à $texte, auquel cas mon texte sera sans accents ni majuscules...  :(  
 
Personne n'a d'autre idée ???

Reply

Marsh Posté le 09-08-2004 à 21:07:03    

Bon finalement en me creusant un peu la tête j'ai trouvé un moyen pour le faire...
 

Code :
  1. function str_gras($mot, $phrase) {
  2. $mot = strtolower(strtr( $mot, "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ", "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn" ));
  3. $recherche = array("a","e","i","o","u","y","c","n" );
  4. $remplacement = array("[a|à|á|â|ã|ä|å]{1}","[e|è|é|ê|ë]{1}","[i|ì|í|î|ï]{1}","[o|ò|ó|ô|õ|ö|ø]{1}","[u|ù|ú|û|ü]{1}","[y|y]{1}","[c|ç]{1}","[n|ñ]{1}" );
  5. $mot = str_replace($recherche, $remplacement, $mot);
  6. return eregi_replace("($mot)", "<b>\\1</b>", $phrase);
  7. }


 
Ce n'est pas extrêmement propre mais pour le moment ça a l'air de bien fonctionner... Si quelqu'un veut proposer une alternative il est le bienvenu.  :)

Reply

Sujets relatifs:

Leave a Replay

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