in_array() et caractères accentués...

Petit nouveau ! | 4 Messages

24 déc. 2010, 16:37

Bonjour,

je suis actuellement en train de développer une petite application PHP, et je rencontre un problème avec la fonction in_array(). En effet, celle-ci renvoie toujours FALSE quand il s'agit de déterminer si un caractère accentué est présent dans un tableau.

Existe-t'il un moyen de corriger le problème, ou bien une fonction alternative qui serait compatible avec ces caractères ?
Merci d'avance pour votre aide (et joyeuses fêtes au passage :) )

ViPHP
xTG
ViPHP | 7331 Messages

24 déc. 2010, 16:40

Ne serais-ce pas un problème d'encodage ?
Ce que tu places dans l'array et ce que tu compares est-il bien en utf8 ?

Petit nouveau ! | 4 Messages

24 déc. 2010, 16:56

J'ai essayé de convertir la chaine avec utf8_encode avant de l'utiliser, mais ça ne change rien...

ViPHP
xTG
ViPHP | 7331 Messages

25 déc. 2010, 12:24

J'ai parcouru la documentation et j'ai trouvé ça :
vladimir at vingrad dot ru
14-Nov-2009 11:14
This function has Problem with UTF-8. To solve this Problem use:

in_array( mb_strtolower($tag, "UTF-8"), $arr)
A essayer.

Petit nouveau ! | 4 Messages

27 déc. 2010, 10:17

Déjà essayé, ça ne fonctionne pas... :(

En fait, c'est très approximatif.
Imaginons que je mette dans mon tableau les caractères "é", "è", "ê", "à", "ù" et "ç".

J'exécute la fonction suivante : in_array(mb_strtolower("é",UTF-8), $tableau), j'obtiens bien TRUE. Par contre, si j'exécute in_array(mb_strtolower("语",UTF-8), $tableau), j'obtiens TRUE également... et j'obtiens FALSE avec des caractères type "+" "_" (ce qui est normal, mais c'est pour montrer que ça ne retourne pas toujours vrai).

Petit nouveau ! | 4 Messages

27 déc. 2010, 12:52

Est-ce que cela fonctionnerait si j'utilisais le charset latin1 ou latin9 (codés sur un seul octet) à la place d'UTF-8 ?

J'ai mis ceci dans le header de la page :
<meta http-equiv="Content-Type" content="text/html; charset="iso-8859-1">

mais ça ne fonctionne pas mieux et la page semble toujours utiliser l'utf8. Y a t'il autre chose à faire ?

ViPHP
xTG
ViPHP | 7331 Messages

27 déc. 2010, 17:20

Le meta n'est pas interprété par le serveur, mais par le navigateur ! Le PHP s'exécute avant d'arriver au navigateur.
C'est dans le php.ini que tu trouveras l'encodage utilisé par PHP, ou bien en le modifiant le temps d'un script avec ini_set().