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
merci mais il y à apparemment un souci sur ces deux lignes :
$str = iconv(‘UTF-8’, ‘ASCII//TRANSLIT//IGNORE’, $str);
et
$str = trim($str, ‘-‘);
crdlt
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;
}
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);}
###
Cette fonction n’a rien d’atroce, elle a le mérite d’etre simple et efficace.
Ta méthode ne remplace pas les accents par des lettres non accentuées mais les supprime de la chaine. Elle ne fait donc pas la même chose.
elle est utilisée aussi pour la génération d’un slug notamment: https://www.lecoindunet.com/slug-php-convertir-un-titre-d-article-en-une-url-85
salut cava c tres gentil
Petite erreur 8ieme ligne et avant dernier caractere de $b. C’est un « L » et pas un « l »
Effectivement, il y avait une petite erreur pour la lettre de remplacement du « Ł » (l au lieu de L). C’est corrigé, merci !
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.
Ca arrive de faire des oublis, l’essentiel c’est que tu ai trouvé la solution !
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
C’est certainement lié à un pb d’encodage. Sais-tu quel encodage tu utilises ?