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