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);
}

Voter pour cette fonction


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

syndrael 20/07/2009 à 09:22

Ouh là !! Que de lignes quand on peut faire la même chose avec des RegExp.

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);