Remplacer les caractères accentués d’une chaine en PHP

En PHP, il est parfois nécessaire de supprimer / remplacer les accents d’un texte ou d’une chaine de caractères par un caractère non accentués (pour générer une url à partir d’un titre par exemple). Ce script PHP recherche les caractères accentués dans un texte et les remplace par leurs équivalents…

Partager :

En PHP, il est parfois nécessaire de supprimer/remplacer les accents d’un texte ou d’une chaine de caractères par un caractère non accentués (pour générer une url à partir d’un titre par exemple).

Ce script PHP recherche les caractères accentués dans un texte et les remplace par leurs équivalents sans accent. Il est simple et fonctionne pour pas mal de langues, peu importe l’encodage (UTF-8 ou autre).

function remove_accent($str)
{
$a = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð',
'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß', 'à', 'á', 'â', 'ã',
'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ñ', 'ò', 'ó', 'ô', 'õ',
'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'Ā', 'ā', 'Ă', 'ă', 'Ą', 'ą', 'Ć', 'ć', 'Ĉ',
'ĉ', 'Ċ', 'ċ', 'Č', 'č', 'Ď', 'ď', 'Đ', 'đ', 'Ē', 'ē', 'Ĕ', 'ĕ', 'Ė', 'ė', 'Ę', 'ę',
'Ě', 'ě', 'Ĝ', 'ĝ', 'Ğ', 'ğ', 'Ġ', 'ġ', 'Ģ', 'ģ', 'Ĥ', 'ĥ', 'Ħ', 'ħ', 'Ĩ', 'ĩ', 'Ī', 'ī',
'Ĭ', 'ĭ', 'Į', 'į', 'İ', 'ı', 'IJ', 'ij', 'Ĵ', 'ĵ', 'Ķ', 'ķ', 'Ĺ', 'ĺ', 'Ļ', 'ļ', 'Ľ', 'ľ',
'Ŀ', 'ŀ', 'Ł', 'ł', 'Ń', 'ń', 'Ņ', 'ņ', 'Ň', 'ň', 'ʼn', 'Ō', 'ō', 'Ŏ', 'ŏ', 'Ő', 'ő', 'Œ',
'œ', 'Ŕ', 'ŕ', 'Ŗ', 'ŗ', 'Ř', 'ř', 'Ś', 'ś', 'Ŝ', 'ŝ', 'Ş', 'ş', 'Š', 'š', 'Ţ', 'ţ', 'Ť',
'ť', 'Ŧ', 'ŧ', 'Ũ', 'ũ', 'Ū', 'ū', 'Ŭ', 'ŭ', 'Ů', 'ů', 'Ű', 'ű', 'Ų', 'ų', 'Ŵ', 'ŵ', 'Ŷ',
'ŷ', 'Ÿ', 'Ź', 'ź', 'Ż', 'ż', 'Ž', 'ž', 'ſ', 'ƒ', 'Ơ', 'ơ', 'Ư', 'ư', 'Ǎ', 'ǎ', 'Ǐ', 'ǐ',
'Ǒ', 'ǒ', 'Ǔ', 'ǔ', 'Ǖ', 'ǖ', 'Ǘ', 'ǘ', 'Ǚ', 'ǚ', 'Ǜ', 'ǜ', 'Ǻ', 'ǻ', 'Ǽ', 'ǽ', 'Ǿ', 'ǿ');

$b = array('A', 'A', 'A', 'A', 'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O',
'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 's', 'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c',
'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'n', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u',
'y', 'y', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D',
'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g',
'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'IJ', 'ij', 'J', 'j', 'K',
'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'N', 'n', 'N', 'n', 'N', 'n', 'n', 'O', 'o',
'O', 'o', 'O', 'o', 'OE', 'oe', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S',
's', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W',
'w', 'Y', 'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i',
'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o');
return str_replace($a, $b, $str);
}

?>

php.net User Contributed Notes : http://www.php.net/manual/en/function.preg-replace.php#96586

Partager :

Avez-vous trouvé cet article utile ?
Article utile ?
ℹ️ À savoir Ce formulaire est privé et ne permet pas de réponse.
Pour poser une question ou laisser un commentaire public, utilisez la zone de commentaires plus bas sur la page.

Logo LeCoinDuNet
💻 Besoin d’une aide informatique ?

Je propose une assistance informatique à distance pour vous aider à dépanner votre PC ou vos logiciels.
Service 100 % Lecoindunet.com

Une idée d’article ou un sujet à proposer ? 👉 Soumettre un article ou une idée

11 commentaires

  1. merci mais il y à apparemment un souci sur ces deux lignes :
    $str = iconv(‘UTF-8’, ‘ASCII//TRANSLIT//IGNORE’, $str);

    et

    $str = trim($str, ‘-‘);

    crdlt

  2. Cette fonction est atroce, car les débutants n’apprenne pas comment utilisé les bonnes fonctions native au php, en modifient de peut ma fonction on peut très bien retourné la même chose.

    Voici la version pour remplacé les caractères et non les supprimés 

    function stripAccent($str)
        {
            setlocale(LC_ALL, ‘fr_FR’);

            $str = iconv(‘UTF-8’, ‘ASCII//TRANSLIT//IGNORE’, $str);
            $str = preg_replace(‘#[^0-9a-z]+#i’, ‘-‘, $str);

            $str = trim($str, ‘-‘);

            return $str;
        }

     

  3. C’est attrose cette fonction, je voie pas pourquoi vous faites comme ça ! 
    Par ailleurs sur Github, j’ai déja vu plein de personne utilisant cette méthode pour preuve voici, un commit d’une class sur lequel j’ai moi même fait des modifications 
    https://github.com/steel-finger/wunderground/commit/4a3384555b41e3813770b2622dfb3c4fb7ab28c3
    ###
    function stripAccent($str){ $string = str_replace(‘ ‘, ‘-‘, $str);  return preg_replace(‘/[^A-Za-z0-9-]/’,  », $string);}
    ###

  4. Ok, je m’excuse. J’avais oublié « <meta http-equiv= »Content-type » content= »text/html; charset=UTF-8″/> » sur la page ou le script est exécuté. 

    Je vous remerci pour votre aide, ce code m’est d’un grand service.

  5. Merci pour cette fonction que j’avais besoin!Mais elle remplace les accents en « ? » chez moi:criminel�l�ves-de-premi�re
    > quel peut être la raison ?
    merci

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *