Fonction PHP : enleverAccents()
Ici, vous pouvez voir (et copier/coller) le code complet de la fonction PHP enleverAccents(). N'hésitez pas voter pour cette fonction si elle vous plaît ou si vous vouv en servez !
enleverAccents() ajouté le 2009-07-19 23:22:06 par vince
function enleverAccents($chaine) {
// Je recupere ma chaine et je la transforme en entite html
$chaine=htmlentities($chaine,ENT_COMPAT,"UTF-8");
//tableau associatif correspondant entitehtml => lettre
$traduire=array(
"á"=>"a",
"Á"=>"A",
"â"=>"a",
"Â"=>"A",
"à"=>"a",
"À"=>"A",
"å"=>"a",
"Å"=>"A",
"ã"=>"a",
"Ã"=>"A",
"æ"=>"a",
"&Aelig;"=>"A",
"ä"=>"a",
"Ä"=>"A",
"ç"=>"c",
"Ç"=>"C",
"é"=>"e",
"É"=>"E",
"ê"=>"e",
"Ê"=>"E",
"è"=>"e",
"È"=>"E",
"ë"=>"e",
"Ë"=>"E",
"í"=>"i",
"Í"=>"I",
"î"=>"i",
"Î"=>"I",
"ì"=>"i",
"Ì"=>"I",
"ï"=>"i",
"Ï"=>"I",
"ñ"=>"n",
"Ñ"=>"N",
"ó"=>"o",
"Ó"=>"O",
"ô"=>"o",
"Ô"=>"O",
"ò"=>"o",
"Ò"=>"O",
"ø"=>"o",
"Ø"=>"O",
"õ"=>"o",
"Õ"=>"O",
"ö"=>"o",
"Ö"=>"O",
"œ"=>"o",
"&Oelig;"=>"O",
"š"=>"s",
"Š"=>"S",
"ú"=>"u",
"Ú"=>"U",
"û"=>"u",
"Û"=>"U",
"ù"=>"u",
"Ù"=>"U",
"ü"=>"u",
"Ü"=>"U",
"ý"=>"y",
"Ý"=>"Y",
"ÿ"=>"y",
"Ÿ"=>"Y"
);
//je retourne ma chaine traduite
return strtr($chaine,$traduire);
}
Ce code je l'ai tout d'abord créé suite à l'utilisation de Pixie CMS, qui lorsque je postais des articles avec des accents me supprimais carrément mon texte, ce qui pour le URL Friendly était pas tip-top.
Suite à des problèmes d'encodage, j'ai donc décidé de transformer la chaine en entite html puis ensuite de la transformer.
Le plus long aura était de tapé toutes les entités =)
pour le fun j'en ai créée une fausse "&otist;"
Bonne utilisation de ma fonction, n'hésitez pas à fournier des améliorations, j'ai pondu ça assez vite dans le cas précis de l'utilisation de Pixie, il faudrait peut-être vérifié que l'on a bien une string en entrée etc.. si on veut sécuriser la fonction
Commentaires sur la fonctions php
vince 20/07/2009 à 13:50
@syndrael : Si tu arrives à me pondre une belle regexp je la prend volontiers, sachant que à la base j'étais parti sur le code ci dessous,mais que j'avais des problèmes d'encodage et que par conséquent ça marchait pas.
function enleveraccents($chaine) {
$string= strtr($chaine,
"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",
"aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");
return $string;
} Florent 21/07/2009 à 11:26
Je veux bien une regex pour faire ceci aussi ^^ . Notamment pour une zone d'inscrption pour le pseudo ^^
Hb 04/08/2009 à 11:53
@vince
met un utf8_encode() ou décode sur ta chaine ($chaine) juste avant d'enlever les accents.
C'est comme cela que j'ai résolu mon problème.
Arkadir 13/08/2009 à 10:40
Puisque ta chaîne de caractères est encodée en UTF-8 à l'origine, pourquoi ne pas tout simplement:
$propre = iconv('UTF-8', 'ASCII//TRANSLIT', $sale);
syndrael 20/07/2009 à 09:22
Ouh là !! Que de lignes quand on peut faire la même chose avec des RegExp.