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… :-)

4 commentaires pour “Supprimer les accents UTF8 avec PHP”

  1. michel dit :

    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

  2. SeB dit :

    Merci Michel pour cette solution. Je vais essayer de la tester. ;-)

  3. CauxMika dit :

    Après 3 heures de recherche, je tombe sur ce post qui me sauve.
    Je peux enfin passer à la suite. Enorme merci.

  4. werutzb dit :

    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

Laisser un commentaire