Page 1 sur 1
enlever les accents
Posté : 10 déc. 2010, 19:13
par youplop
Bonsoir
J'aurais besoin dans une page d'une fonction qui supprime les accents.
J'ai essayé ceci:
function stripAccents($string){
return strtr($string,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ',
'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
}
Mais les accents ne sont pas enlevés, ils sont remplacés par d'autres caractères:
é ; è ; à ; ï deviennent respectivement Yo ; Yi ; Ya ; YA
Une idée?
La page est en utf-8.
Re: enlever les accents
Posté : 10 déc. 2010, 19:19
par epommate2
Je suis tombé une fois la dessus :
setlocale(LC_ALL, 'fr_FR.UTF8');
$data = iconv('UTF8', 'ASCII//TRANSLIT', $data);
A adapter en fonction de son encodage, bien sur.
Re: enlever les accents
Posté : 10 déc. 2010, 19:23
par stealth35
Je suis tombé une fois la dessus :
setlocale(LC_ALL, 'fr_FR.UTF8');
$data = iconv('UTF8', 'ASCII//TRANSLIT', $data);
A adapter en fonction de son encodage, bien sur.
ca marche pas partout ca, en plus c'est pas bon c'est UTF
-8 il faut aussi rajouter le IGNORE et si la lib n'est pas compilée avec libiconv c'est foutu
Re: enlever les accents
Posté : 10 déc. 2010, 19:27
par epommate2
Oui, d'accord pour le "ça ne marche pas partout" il faut fatalement le bon encodage de départ et libiconv, mais par contre pourquoi "c'est pas bon c'est UTF-8" ?
Re: enlever les accents
Posté : 10 déc. 2010, 19:29
par stealth35
Oui, d'accord pour le "ça ne marche pas partout" il faut fatalement le bon encodage de départ et libiconv, mais par contre pourquoi "c'est pas bon c'est UTF-8" ?
parce que t'as mis UTF8 c'est UTF-8 (avec un tiret)
le setlocale ne sert pas non plus
Re: enlever les accents
Posté : 10 déc. 2010, 19:43
par epommate2
chaine = "éééééaaaaaàààà\n";
echo iconv('UTF-8', 'ASCII//TRANSLIT', $chaine);
echo iconv('UTF8', 'ASCII//TRANSLIT', $chaine);
setlocale(LC_ALL, 'fr_FR.UTF8');
echo iconv('UTF-8', 'ASCII//TRANSLIT', $chaine);
echo iconv('UTF8', 'ASCII//TRANSLIT', $chaine);
setlocale(LC_ALL, 'C');
echo iconv('UTF-8', 'ASCII//TRANSLIT',$chaine);
echo iconv('UTF8', 'ASCII//TRANSLIT', $chaine);
setlocale(LC_ALL, 'fr_FR.UTF-8');
echo iconv('UTF-8', 'ASCII//TRANSLIT',$chaine);
echo iconv('UTF8', 'ASCII//TRANSLIT', $chaine);
?????aaaaa????
?????aaaaa????
eeeeeaaaaaaaaa
eeeeeaaaaaaaaa
?????aaaaa????
?????aaaaa????
eeeeeaaaaaaaaa
eeeeeaaaaaaaaa
(PHP 5.3.2-1ubuntu4.5)
Re: enlever les accents
Posté : 10 déc. 2010, 19:45
par stealth35
'e'e'e'e'eaaaaa`a`a`a`a
Notice: iconv(): Wrong charset, conversion from `UTF8' to `ASCII//TRANSLIT' is not allowed
'e'e'e'e'eaaaaa`a`a`a`a
Notice: iconv(): Wrong charset, conversion from `UTF8' to `ASCII//TRANSLIT' is not allowed
'e'e'e'e'eaaaaa`a`a`a`a
Notice: iconv(): Wrong charset, conversion from `UTF8' to `ASCII//TRANSLIT' is not allowed
'e'e'e'e'eaaaaa`a`a`a`a
Notice: iconv(): Wrong charset, conversion from `UTF8' to `ASCII//TRANSLIT' is not allowed
sur un WIN PHP 5.3.4
Re: enlever les accents
Posté : 10 déc. 2010, 19:46
par youplop
Merci pr vos réponses
J'essaie tout de suite
Re: enlever les accents
Posté : 10 déc. 2010, 19:51
par epommate2
Ok, donc sur Ubuntu, le setlocale est nécessaire, par contre sous Windows, il ne comprend pas l'alias "UTF8".
Donc quelque chose comme ca devrait fonctionner partout ? (si libiconv et si fr_FR.UTF-8 présent sur le système sous Linux)
setlocale(LC_ALL, 'fr_FR.UTF-8');
$data = iconv('UTF-8', 'ASCII//TRANSLIT', $data);
Re: enlever les accents
Posté : 10 déc. 2010, 20:23
par stealth35
Ok, donc sur Ubuntu, le setlocale est nécessaire, par contre sous Windows, il ne comprend pas l'alias "UTF8".
Donc quelque chose comme ca devrait fonctionner partout ? (si libiconv et si fr_FR.UTF-8 présent sur le système sous Linux)
setlocale(LC_ALL, 'fr_FR.UTF-8');
$data = iconv('UTF-8', 'ASCII//TRANSLIT', $data);
non libiconv ne prend pas en compte la locale et fait le tranlist diffament
'e'e'e'e'eaaaaa`a`a`a`a
'e'e'e'e'eaaaaa`a`a`a`a
'e'e'e'e'eaaaaa`a`a`a`a
'e'e'e'e'eaaaaa`a`a`a`a
'e'e'e'e'eaaaaa`a`a`a`a
'e'e'e'e'eaaaaa`a`a`a`a
'e'e'e'e'eaaaaa`a`a`a`a
'e'e'e'e'eaaaaa`a`a`a`a
OSX PHP 5.3.4 libiconv
ton iconv doit etre sous glibc (qui lui prend la locale)
pour voir avec quoi est compiler iconv :
var_dump(ICONV_IMPL, ICONV_VERSION);
Re: enlever les accents
Posté : 10 déc. 2010, 20:43
par epommate2
Gagné :
string(5) "glibc"
string(6) "2.11.1"
Hum.... du coup, c'est quoi la solution portable ?
Re: enlever les accents
Posté : 10 déc. 2010, 20:43
par youplop
L'OS de mon serveur est Linux phpn5-g5.priv.free.fr
J'ai testé avec
setlocale(LC_ALL, 'fr_FR.UTF-8');
$data = iconv('UTF-8', 'ASCII//TRANSLIT', $chaine);
Cela me renvoie l'erreur suivante
Notice: iconv() [function.iconv]: Detected an illegal character in input string
Re: enlever les accents
Posté : 10 déc. 2010, 20:45
par jojolapine
Et sinon au lieu de se compliquer la vie...
Il faut simplement utiliser un str_replace() et ça ira...
en effet strstr semble bugguer pour l'utf8:
function stripAccents($string){
$search = array('a','a','a','a','a',...);
$replace = array('à','á','â','ã','ä',...);
return str_replace($search,$replace,$string);
}
C'est un peu plus long à écrire, mais ça a le mérite d'être fonctionnel

Re: enlever les accents
Posté : 10 déc. 2010, 21:17
par stealth35
Re: enlever les accents
Posté : 10 déc. 2010, 21:42
par youplop
merci jojolapine!
str_replace() marche!
j'ai un peu galéré au début car je mettais le texte en minuscule au début, ce qui modifiait le code des accents.
Enfin voila tt marche nickel

merci a vous