Supprimer les accents UTF8 avec PHP
Il est souvent utile de supprimer les accents des caractères accentués dans une chaîne. Cette action est utilisée par exemple pour générer une URL propre ou bien un nom de fichier qui ne posera pas de problème.
En PHP, le développeur retrouve souvent la solution suivante :
$str = strtr($str, ‘ÁÀÂÄÃÅÇÉÈÊËÍÏÎÌÑÓÒÔÖÕÚÙÛÜÝ’, ‘AAAAAACEEEEEIIIINOOOOOUUUUY’);
$str = strtr($str, ‘áàâäãåçéèêëíìîïñóòôöõúùûüýÿ’, ‘aaaaaaceeeeiiiinooooouuuuyy’);
Ce bout de code fonctionne très bien en IS0-8859-1. Cependant, avec une chaîne en UTF8, des caractères étranges vont s’immiscer. Cela vient du fait que les caractères sont encodés sur 8 bits.
Après maintes essais avec iconv() et autres strtr(), je n’ai pas trouvé de solution à ce problème. Heureusement, Olivier Laviale a trouvé une astuce. Je ne suis pas convaincu que ce soit la méthode la plus performante, mais elle a le mérite de fonctionner :
$str = htmlentities($str, ENT_NOQUOTES, ‘utf-8′); $str = preg_replace(‘#\&([A-za-z])(?:uml|circ|tilde|acute|grave|cedil|ring)\;#’, ‘\1′, $str);
$str = preg_replace(‘#\&([A-za-z]{2})(?:lig)\;#’, ‘\1′, $str);
$str = preg_replace(‘#\&[^;]+\;#’, ”, $str);
Je vous laisser consulter le billet original d’Olivier sur le sujet si vous souhaitez avoir plus d’informations.
Ah ! Les joies de l’encodage… ![]()
5 mai 2008 à 11:30
Bonjour,
Ayant le même problème, (j’avais aussi essayer avec utf8_decode), je viens de trouver cette solution qui fonctionne.
http://www.developpez.net/forums/showthread.php?t=284411
Apparemment, strtr travaille directement sur les octet au contraire de str_replace.
Michel
4 juin 2008 à 13:11
Merci Michel pour cette solution. Je vais essayer de la tester.
15 septembre 2008 à 18:09
Après 3 heures de recherche, je tombe sur ce post qui me sauve.
Je peux enfin passer à la suite. Enorme merci.
8 octobre 2008 à 3:08
Hi!
I want to extend my SQL experience.
I red so many SQL books and want to
read more about SQL for my position as db2 database manager.
What would you recommend?
Thanks,
Werutz