Accueil > Tutoriels pour Webmasters > [PHP] Supprimer les accents

[PHP] Supprimer les accents

Dans le domaine informatique il y a parfois des moments où il faut supprimer les accents. Sachant que dans le monde anglophone, les accents sont très peu souvent utilisés, il y a des endroits qui ne les acceptes pas. Par exemple, une URL peut être plus présentable sans accent. Dès lors, ce tutoriel va présenter un bout de code PHP qui remplace les caractères accentués par leur équivalent (exemple: "à" remplacé par "a", "é" remplacé par "e" ...).

Prérequis

Ce code est réalisé en PHP, il faut donc connaitre un minimum ce langage pour comprendre le code qui sera présenté.

Code PHP simple

Dans le code ci-dessous, la variable $texte doit contenir le texte qui doit être épuré de ces accents:
  1. <?php
  2. // Remplace les caractères accentués par leurs équivalents sans accents.
  3. $texte = strtr(
  4. $texte,
  5. '@ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
  6. 'aAAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'
  7. );
  8. ?>

Une fois cette ligne de code utilisée, la variable $texte n'aura (normalement) plus d'accents. Il faut toutefois prendre notes de deux choses:

  • Le caractère arobase est ici remplacé par un "a"
  • Normalement la plupart des caractères accentués seront remplacés (pas forcément tous)

Fonction très complète

En général, la fonction ci-dessus se charge de transformer pratiquement tous les caractères qui posent problème. Cependant, il peut être nécessaire de supprimer plus de caractères (pour d'autres langues ou pour supprimer des ligatures tel que "œ"). Par ailleurs, la fonction ci-dessus n'est pas parfaite car elle ne fonctionne pas avec des caractères encodé en 32bits (au lieu de 8 bits pour un caractère ASCII). Dès lors, la nouvelle fonction présentées ci-dessous est à privilégier:

  1. <?php
  2. /**
  3.  * Supprimer les accents
  4.  *
  5.  * @param string $str chaîne de caractères avec caractères accentués
  6.  * @param string $encoding encodage du texte (exemple : utf-8, ISO-8859-1 ...)
  7.  */
  8. function suppr_accents($str, $encoding='utf-8')
  9. {
  10. // transformer les caractères accentués en entités HTML
  11. $str = htmlentities($str, ENT_NOQUOTES, $encoding);
  12.  
  13. // remplacer les entités HTML pour avoir juste le premier caractères non accentués
  14. // Exemple : "&ecute;" => "e", "&Ecute;" => "E", "à" => "a" ...
  15. $str = preg_replace('#&([A-za-z])(?:acute|grave|cedil|circ|orn|ring|slash|th|tilde|uml);#', '\1', $str);
  16.  
  17. // Remplacer les ligatures tel que : Œ, Æ ...
  18. // Exemple "Å“" => "oe"
  19. $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str);
  20. // Supprimer tout le reste
  21. $str = preg_replace('#&[^;]+;#', '', $str);
  22.  
  23. return $str;
  24. }
  25.  
  26. // Exemple d'utilisation de la fonction
  27. $texte = 'Ça va mon cœur adoré?';
  28. echo suppr_accents($texte);
  29. // Affiche : "Ca va mon coeur adore?"
  30. ?>
Ce code bien que plus complet, à cependant le petit inconvénient d'être un peu plus lourd que le précédent.