Complément et alrtenative pour supprimer les accents
Comme beaucoup de caractères accentués arrivent modifiés d'un
Code : Tout sélectionner
<form name="xxxxxxxxxxxx" action="xxxxxxxxxxxxx.php" method="post"> et qu'un remplacement de ce genre ne fonctionne pas dans ce cas :
Code : Tout sélectionner
$texte = strtr($texte,
'àáâãäåçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ',
'aaaaaaceeeeiiiinooooouuuuyyAAAAAACEEEEIIIINOOOOOUUUUY');
à force de recherche j'ai trouvé une fonction pour supprimer les accent et en général les diacritiques, la page s'appelle
Supprimer les accents d’une chaîne avec PHP (je ne peux pas mettre le lien), voici le code miracle :
Code : Tout sélectionner
echo
\Transliterator::create('NFD; [:Nonspacing Mark:] Remove; NFC')
->transliterate('Héhé, ça marche !')
;
// Hehe, ca marche !
Je l'ai adapté de cette façon :
Code : Tout sélectionner
$texte = Transliterator::create('NFD; [:Nonspacing Mark:] Remove; NFC')
->transliterate($texte);
Ah oui ! j'ai supprimé l'antislash avant
Transliterator:: car :
1 - ça fonctionne sans ;
2 - dans mon éditeur php préféré avec colorisation syntaxique, cet antislash n'a pas la couleur de la commande
\Transliterator::create
donc ça m'a mis la puce à l'oreille ;
3 - j'ai trouvé le code sur d'autres pages sans l'antislash dont celle-ci présentée de façon alternative :
Code : Tout sélectionner
$enc = "UTF-8";
// On retire les accents de la chaine et du terme recherché
$transliterator = Transliterator::create('NFD; [:Nonspacing Mark:] Remove; NFC;');
$sclean = mb_strtolower($transliterator->transliterate($string), $enc);
$search = mb_strtolower($transliterator->transliterate($search), $enc);
Maintenant il y a des caractères comme
ð ø qui semblent avoir des diacritiques mais en fait non, et qui resterons identiques après le traitement ci-dessus, donc pour n'avoir dans ma chaîne de caractères que minuscules, chiffres et
- (tiret du 6), après avoir remplacé les
_ . ' par des
- je supprime tous les autres caractères avec cette fonction :
Par contre l'astuce donnée plus haut pour remplacer l'apostrophe typographique
’ est toujours valable car ce n'est pas un diacritique.