Jonathan Beliën

Jonathan Beliën

Freelance Web Developer

« Spécialiste » en cartographie numérique
Membre du conseil d'administration d'OpenStreetMap Belgique
Membre du conseil d'administration d'Open Knowledge Belgique
Fan de LEGO et de bande-dessinées



PHP: Supprimer les lettres accentuées

Publié le 01.03.2013

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. '&oelig;'
  $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