Envie de lustrer vos chaines de caractères ? Voici une fonction php qui permet de supprimer les accents et de normaliser une chaine de caractères utf-8. Je l'utilise pour créer des urls "propres" ou pour comparer des textes.
Nettoyage d'une chaine de caractères
Comme une liste vaut mieux qu'un grand discourt, je vous présente ce que fait réellement cette fonction :
- Mise en minuscule des caractères
- Remplacement de tous les caractères autres qu'une lettre ou un chiffre par un espace
- Remplacement des accents par la lettre correspondante sans accent
Et bien sur le code php :
<?php
function clean ($str)
{
/** Mise en minuscules (chaîne utf-8 !) */
$str = mb_strtolower($str, 'utf-8');
/** Nettoyage des caractères */
mb_regex_encoding('utf-8');
$str = trim(preg_replace('/ +/', ' ', mb_ereg_replace('[^0-9\p{L}]+', ' ', $str)));
/** strtr() sait gérer le multibyte */
$str = strtr($str, array(
'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'a'=>'a', 'a'=>'a', 'a'=>'a', 'ç'=>'c', 'c'=>'c', 'c'=>'c', 'c'=>'c', 'c'=>'c', 'd'=>'d', 'd'=>'d', 'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'e'=>'e', 'e'=>'e', 'e'=>'e', 'e'=>'e', 'e'=>'e', 'g'=>'g', 'g'=>'g', 'g'=>'g', 'h'=>'h', 'h'=>'h', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'i'=>'i', 'i'=>'i', 'i'=>'i', 'i'=>'i', 'i'=>'i', '?'=>'i', 'j'=>'j', 'k'=>'k', '?'=>'k', 'l'=>'l', 'l'=>'l', 'l'=>'l', '?'=>'l', 'l'=>'l', 'ñ'=>'n', 'n'=>'n', 'n'=>'n', 'n'=>'n', '?'=>'n', '?'=>'n', 'ð'=>'o', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'o'=>'o', 'o'=>'o', 'o'=>'o', 'œ'=>'o', 'ø'=>'o', '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', 'u'=>'u', 'u'=>'u', 'w'=>'w', 'ý'=>'y', 'ÿ'=>'y', 'y'=>'y', 'z'=>'z', 'z'=>'z', 'ž'=>'z'
));
return $str;
}
?>
Suppression des accents dans une chaine utf8
Edit du 2013-12-04 : Voici une méthode simple pour supprimer les accents des chaines utf8.
<?php
function removeAccents($string) {
//Normalisation de la chaine utf8 en mode caractère + accents
$string = Normalizer::normalize($string, Normalizer::FORM_D);
//Suppression des accents
return preg_replace('~\p{Mn}~u', '', $string);
}
?>
Image : David Abrams