Comment supprimer en PHP de manière propre toutes les lettres accentuées présentes dans une chaîne de caractères ?
Olivier Laviale, auteur de weirdog.com, nous propose plusieurs exemples ainsi que la raison de ne pas utiliser la fonction qu’on voit partout :
$str = strtr($str, 'ÁÀÂÄÃÅÇÉÈÊËÍÏÎÌÑÓÒÔÖÕÚÙÛÜÝ', 'AAAAAACEEEEEIIIINOOOOOUUUUY');
$str = strtr($str, 'áàâäãåçéèêëíìîïñóòôöõúùûüýÿ', 'aaaaaaceeeeiiiinooooouuuuyy');
La solution finale proposée par O. Laviale est la suivante : encoder la chaîne de caractères à l’aide de la fonction htmlentities()
et ensuite remplacer tous les caractères encodés (de la forme &<lettre><code accent>
).
function wd_remove_accents($str, $charset='utf-8')
{
$str = htmlentities($str, ENT_NOQUOTES, $charset);
$str = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '1', $str);
$str = preg_replace('#&([A-za-z]{2})(?:lig);#', '1', $str); // pour les ligatures e.g. 'œ'
$str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères
return $str;
}
L’article complet se trouve à l’adresse suivante : http://www.weirdog.com/blog/php/supprimer-les-accents-des-caracteres-accentues.html
Pour le même prix, O. Laviale nous propose également une fonction (basée sur sa fonction wd_remove_accents()
) qui permet de trier les clés accentuées d’un tableau associatif : http://www.weirdog.com/blog/php/ordonner-les-cles-accentuees-dun-tableau-associatif.html