lundi 16 février 2009

En PHP, convertir les caractères spéciaux d'une chaine

Il s'agit de proposer une manière de convertir en PHP les caractères spéciaux que l'on peut trouver en UTF-8 par exemple, en caractère ASCII pure, c'est à dire de convertir par exemple le caractère 'é' en 'E'. La fonction proposée convertie également en majuscule. En revanche, elle supprime aussi les caractères de ponctuation comme l'espace et le tiret.

L'avantage de cette fonction, c'est de ne pas devoir gérer de table de correspondance, source d'erreur bien souvent. Elle se base sur la très efficace fonction iconv() qui se charge de convertir les caractères spéciaux en équivalent ASCII. Cette fonction transforme un 'é' en deux caractères 'e (accent + e). Ma fonction supprime donc simplement tous les caractères ne faisant pas partie des 26 lettres de l'alphabet occidental.

function convertir_en_ascii_maj($s)
{
$r = '';
$s1 = strtoupper(trim(iconv('UTF-8', 'ASCII//TRANSLIT', $s)));
for ($i = 0; $i <>
{
$ch = ord($s1[$i]);
if ($ch<= ord('Z') && $ch>= ord('A'))
$r .= chr($ch);
}
return $r;
}


// $s est en UTF-8 pour l'exemple
echo " $s => ". convertir_en_ascii_maj($s);

périgueux => PERIGUEUX

C'est pas une solution miracle, mais cela fait son office simplement et sans trop de peine.

Liens:
article qui m'a inspiré
article qui m'a fait découvrir iconv
un autre article concernant le précédent lien

Aucun commentaire: