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…

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
Merci Michel pour cette solution. Je vais essayer de la tester.
Après 3 heures de recherche, je tombe sur ce post qui me sauve.
Je peux enfin passer à la suite. Enorme merci.
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
pardon, cette foction ne sert à rien, j’essayé des heures et des heures mais j’ai pas le resulta que je veux, et c’est vraiment simple ce que je veux: remplacer ‘é’ dans le mot ‘musée’,j’utilise cette fonction et j’obtient tjrs ‘musée’
werutzb,
Sorry, I have no references to recommend.
habib,
Peut-être que l’astuce ne fonctionne pas dans ton cas précis mais je peux t’assurer que ça fonctionne en principe. Tu as peut-être un problème autre que l’encodage de ta chaine…
Bonjour,
Je souhaiterais remplacer le caractère Š (S avec caron : c’est un caractère croatien) par un s sans accents, cependant, strtr ne semble pas le reconnaître.
Existe-t-il une solution ?
Idem que CauxMika
Après quelques heures d’utilisation de str_replace et strtr sans y parvenir, j’ai enfin réussi à décoder proprement ce que je voulais.
Merci !
Aaah enfin merci beaucoup, ça m’a aidé à 100% après 30min de recherches infructueuses!