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

[PHP] Enlever 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:
<?php
// Remplace les caractères accentués par leurs équivalents sans accents.
$texte = strtr($texte, '@ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
                       'aAAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
?>
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 "œ"). La fonction ci-dessous se charge alors de supprimer encore plus de caractère accentués.
<?php
// Fonction qui supprimer de nombreux caractères accentués
function suppr_accents($str)
{
$avant = array('À','Á','Â','Ã','Ä','Å','Ā','Ă','Ą','Ǎ','Ǻ','Æ','Ǽ'
'Ç','Ć','Ĉ','Ċ','Č','Ð','Ď','Đ',
'É','È','Ê','Ë','Ē','Ĕ','Ė','Ę','Ě','Ĝ','Ğ','Ġ','Ģ',
'Ĥ','Ħ','Ì','Í','Î','Ï','Ĩ','Ī','Ĭ','Į','İ','ĺ','ļ','ľ','ŀ','ł','Ǐ','IJ','Ĵ','Ķ','Ĺ','Ļ','Ľ','Ŀ','Ł',
'Ń','Ņ','Ň','Ñ','Ò','Ó','Ô','Õ','Ö','Ō','Ŏ','Ő','Ơ','Ǒ','Ø','Ǿ','Œ','Ŕ','Ŗ','Ř',
'Ś','Ŝ','Ş','Š','Ţ','Ť','Ŧ','Ũ','Ù''Ú','Û','Ü','Ū','Ŭ','Ů','Ű','Ų','Ư','Ǔ','Ǖ','Ǘ','Ǚ','Ǜ',
'Ŵ','Ý','Ŷ','Ÿ','Ź','Ż','Ž',
'à','á','â','ã','ä','å','ā','ă','ą','ǎ','ǻ','æ','ǽ','ç','ć','ĉ','ċ','č','ď','đ',
'è','é','ê','ë','ē','ĕ','ė','ę','ě','ĝ','ğ','ġ','ģ','ĥ','ħ',
'ì','í','î','ï','ĩ','ī','ĭ','į','ı','ǐ','ij','ĵ','ķ',
'ñ','ń','ņ','ň','ʼn','ò','ó','ô','õ','ö','ō','ŏ','ő','ơ','ǒ','ø','ǿ','œ',
'ŕ','ŗ','ř','ś','ŝ','ş','š','ß','ţ','ť','ŧ',
'ù','ú','û','ü','ũ','ū','ŭ','ů','ű','ų','ǔ','ǖ','ǘ','ǚ','ǜ','ư','ŵ','ý','ÿ','ŷ','ź','ż','ž','ƒ','ſ');
$apres = array('A','A','A','A','A','A','A','A','A','A','A','AE','AE',
'C','C','C','C','C','D','D','D',
'E','E','E','E','E','E','E','E','E','G','G','G','G',
'H','H','I','I','I','I','I','I','I','I','I','I','I','I','I','I','I','IJ','J','K','L','L','L','L','L',
'N','N','N','N','O','O','O','O','O','O','O','O','O','O','O','O','OE','R','R','R',
'S','S','S','S','T','T','T','U','U','U','U','U','U','U','U','U','U','U','U','U','U','U','U',
'W','Y','Y','Y',Z','Z','Z',
'a','a','a','a','a','a','a','a','a','a','a','ae','ae','c','c','c','c','c','d','d',
'e','e','e','e','e','e','e','e','e','g','g','g','g','h','h',
'i','i','i','i','i','i','i','i','i','i','ij','j','k',
'n','n','n','n','n',
'o','o','o','o','o','o','o','o','o','o','o','o','oe',
'r','r','r','s','s','s','s','s','t','t','t',
'u','u','u','u','u','u','u','u','u','u','u','u','u','u','u','u','w','y','y','y','z','z','z','f','s');
return str_replace($avant, $apres, $str);
}

// Exemple d'utilisation de la fonction
$texte = 'Ça va mon cœur?'
echo suppr_accents($texte);
// Va afficher "Ca va mon coeur?"
?>
Ce code bien que plus complet, à cependant le petit inconvénient d'être un peu plus lourd que le précédent.