Enlever les accents d'une chaine

19 messages · 6 vues

Code: Tout sélectionner » dim. 22 juin 2008 14:20 #4374

Bonjour,

J'ai besoin d'aide.
Parfois, ça marche, parfois, ça ne marche pas. Pourquoi ? Aucune idée.

Voici mon code :
Code: Tout sélectionner
function ote_accent($chaine){
$ch = strtr($chaine,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
return $ch;
}


Alors, quand j'écris :
Code: Tout sélectionner
$chaine = 'ééééé';
echo ote_accent($chaine);


Ca me donne : ééééé

Vous avez une idée ?
Membre
Messages : 22
Inscription : 19 mai 2008

Re: Enlever les accents d'une chaine

Code: Tout sélectionner » dim. 22 juin 2008 15:47 #4377

strstr ne fonctionne pas comme ça.

Tu dois juste passer 1 caractère comme 1er argument, et non pas ta chaine complète.

Ceci marchera :

Code: Tout sélectionner
$chaine = 'é';
echo ote_accent($chaine);


Tu dois donc faire une boucle dans ta fonction pour traiter les caractères un à un.
Membre
Messages : 22
Inscription : 19 mai 2008

Re: Enlever les accents d'une chaine

Anewa » dim. 22 juin 2008 16:03 #4378

Dino a écrit:Tu dois donc faire une boucle dans ta fonction pour traiter les caractères un à un.


ça va consommer pas mal de ressource si le texte est long :S
Membre
Messages : 265
Inscription : 25 mai 2008

Re: Enlever les accents d'une chaine

Dino » dim. 22 juin 2008 17:17 #4381

Anewa a écrit:
Dino a écrit:Tu dois donc faire une boucle dans ta fonction pour traiter les caractères un à un.


ça va consommer pas mal de ressource si le texte est long :S


C'est clair...

A raison d'une vingtaine d'itération maximale par caractère, tu risques péniblement d'atteindre quelques centaines de millions de caractère à la seconde. Du coup si tu envisageais de retirer les accents de la BDD de Wikipedia ton serveur risque bien de chauffer pendant au moins..... 500ms.
Membre
Messages : 337
Inscription : 21 mai 2008

Re: Enlever les accents d'une chaine

Code: Tout sélectionner » dim. 22 juin 2008 18:10 #4388

et pourquoi pas

Code: Tout sélectionner
$ch = str_replace('ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy', $chaine);
Membre
Messages : 22
Inscription : 19 mai 2008

Re: Enlever les accents d'une chaine

ZioupiX » dim. 22 juin 2008 23:22 #4389

Ca ne marche pas !
Membre
Messages : 214
Inscription : 25 mai 2008

Re: Enlever les accents d'une chaine

Code: Tout sélectionner » lun. 23 juin 2008 00:52 #4396

J'utilise également la fonction strtr comme le fait Zioupix, et ça marche du tonnerre.. c'est pas lent du tout..
Par contre, au lieu d'entourer les lettres par de simples quotes, je le fais avec des doubles quotes.. le problème pourrait venir de là..

Donc, essaye ça :
Code: Tout sélectionner
$ch = strtr($chaine,"ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ","AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy");
Membre
Messages : 22
Inscription : 19 mai 2008

Re: Enlever les accents d'une chaine

morgan » lun. 23 juin 2008 03:16 #4402

En C ça poserait un problème mais pas en PHP normalement.
Membre
Messages : 91
Inscription : 25 mai 2008

Re: Enlever les accents d'une chaine

Dino » lun. 23 juin 2008 09:53 #4417

Effectivement, tu peux passer une chaine complète avec strstr(), autant pour moi.
Donc ton problème est simple : erreur d'encodage !
Ceci ne peut pas marcher si tu es en UTF8 par exemple. Vérifie l'encodage de ton source PHP. Si tu souhaites rester en UTF8, tu devras utiliser les chaines multibytes.
Membre
Messages : 337
Inscription : 21 mai 2008

Re: Enlever les accents d'une chaine

morgan » lun. 23 juin 2008 15:41 #4424

Oula ça devient compliquer par ici
Membre
Messages : 91
Inscription : 25 mai 2008