Suppressions des accents avec PHP

Il existe un tas de raison pour supprimer les accents d'une chaîne de caractères, par exemple, préparer une chaîne de caractères pour l'insertion dans une URL. Voici deux scripts PHP pour supprimer les caractères accentuées d'une chaîne.

Code PHP pour charset ISO

Le code est très simple et est basé sur la commande strstr

$chaine_avec_accent = 'Bonjour, vous êtes étonnamment brillant';
$chaine_convertit= strtr($chaine_avec_accent,
   'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ',
   'aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn');

Ce code fonctionne très bien avec les charsets en 8 bits comme le charset iso-8859-1 ou iso-8859-15 mais pas pour les charsets codé sur plusieurs octets comme UTF-8. Dans le cas de l'UTF-8, il affiche deux caractères quelconque à la place du caractère accentué.

Voici un code PHP pour tous les charsets

Voici un code PHP plus complexe qui enlève les caractères sans problème d'affichage et quelque soit le charset utilisé.

function enleve_accent($chaine=''){
$accent = array('%C3%80'=>'A','%C3%81'=>'A','%C3%82'=>'A','%C3%83'=>'A','%C3%84'=>'A','%C3%85'=>'A','%C3%A0'=>'a','%C3%A1'=>'a','%C3%A2'=>'a','%C3%A3'=>'a','%C3%A4'=>'a','%C3%A5'=>'a','%C3%92'=>'O','%C3%93'=>'O','%C3%94'=>'O','%C3%95'=>'O','%C3%96'=>'O','%C3%98'=>'O','%C3%B2'=>'o','%C3%B3'=>'o','%C3%B4'=>'o','%C3%B5'=>'o','%C3%B6'=>'o','%C3%B8'=>'o','%C3%88'=>'E','%C3%89'=>'E','%C3%8A'=>'E','%C3%8B'=>'E','%C3%A8'=>'e','%C3%A9'=>'e','%C3%AA'=>'e','%C3%AB'=>'e','%C3%87'=>'C','%C3%A7'=>'c','%C3%8C'=>'I','%C3%8D'=>'I','%C3%8E'=>'I','%C3%8F'=>'I','%C3%AC'=>'i','%C3%AD'=>'i','%C3%AE'=>'i','%C3%AF'=>'i','%C3%99'=>'U','%C3%9A'=>'U','%C3%9B'=>'U','%C3%9C'=>'U','%C3%B9'=>'u','%C3%BA'=>'u','%C3%BB'=>'u','%C3%BC'=>'u','%C3%BF'=>'y','%C3%91'=>'N','%C3%B1'=>'n');
$chaine = urlencode($chaine);
foreach ($accent as $key => $value) {
    $chaine = str_replace($key,$value,$chaine);
}
return urldecode($chaine);
}

Dans la fonction PHP ci-dessus, vous trouverez dans le tableau accent la liste des caractères accentués et leur valeur de remplacement. Nous convertissons la chaîne d'entrée grâce à la commande urlencode, qui permet la conversion des caractères accentuées dans un code compatible avec les URLs. Nous parcourons le tableau accent grâce à une boucle foreach puis nous remplaçons les caractères accentués par leurs équivalents sans accent. Puis nous décodons la chaîne d'entrée grâce à la commande urldecode.

Conclusion

Les deux codes ci-dessus sont équivalent dans le résultat. Néanmoins le second code consomme légèrement plus de ressources machines. Si votre site est en iso-8859-1 ou en iso-8859-15 privilégié le premier code. Si votre site gère plusieurs langues ou tout simplement vous voulez assurer à votre site une certaine portabilité (appareils nomades, …) choisissez le second code. Merci de votre lecture.

Notes de version

  • [27/12/2015] : Article initial
  • [17/11/2017] : Harmonsiation de la page

Auteurs et sources