2010-10-08 5 views
0

J'ai lu tous les articles sur le sujet mais je ne pense pas avoir trouvé de réponse à ma question, ça me rend fou. J'ai un couple de fichiers php, un stocke des données dans mySQL db, un autre lit ces données: je reçois des données du monde entier et il me semble que je réussis à stocker le caractère asiatique d'une manière correcte, mais quand J'essaie de lire ces données, je ne peux pas récupérer ces caractères.Comment lire les caractères asiatiques (japonais, chinois) après json_encode en PHP

Comme beaucoup d'autres utilisateurs j'ai eu ?? au lieu des caractères corrects.

Haut de mes fichiers PHP je me suis:

header('Content-Type: application/json; charset=utf-8'); 

puis

mysql_query("SET CHARACTER SET utf8", $link); 
mysql_query("SET NAMES 'utf8'", $link); 

puis

$fab[] = array_map(utf8_encode,$array); 

ici si je print_r ($fab) j'ai perdu :-(caractères asiatic

Puis w poule je fais:

$json_string = json_encode($fab); //originale 

Ce que je reçois est "??".

Quelle est la bonne façon de récupérer les bons caractères? La chaîne JSON est ensuite transmise à un client iPhone.

Toute suggestion ou aide serait grandement appréciée.

Merci de toute façon, Fabrizio

Répondre

2

On dirait que vous êtes à double encodage il? Si vous obtenez les données de mysql qui est déjà encodé en utf8, quel est le point de $fab[] = array_map(utf8_encode,$array); alors?

Juste eu la même chose il y a 2 jours, lorsque j'acceptais des données utf8 à partir d'un formulaire ExtJs et il a été foiré. C'est parce que j'ai utilisé utf8_encode sur les données que j'ai reçues du script (qui était dans utf8). Donc je l'ai cassé en double encodage. Peut-être même dans votre cas

+0

Ok, d'abord merci, puis j'ai déplacé le array_map mais j'ai eu le même résultat: dans mes tests, ce que j'ai obtenu est parfois "??" et d'autres fois le code hexadécimal, mais jamais de caractères asiatiques :( – Fabrizio

+0

Si vous obtenez quelque chose comme \ uxxxx (où xx sont représentés par des nombres hexadécimaux), l'encodage est correct, les caractères UTF et Unicode DOIVENT être encodés de cette façon. chaîne dans un objet JavaScript (par exempleavec eval (jsonString) et ensuite imprimer le contenu des champs qu'il devrait imprimer en caractères asiatiques – Tseng

+0

Si l'encodage est correct je suppose que j'ai besoin de décoder le côté client (sur l'application iPhone), est-ce correct? Quoi qu'il en soit grand merci pour aider. – Fabrizio

0

Le problème était ce que Tseng a dit: double encodage sur le tableau: je pensais avoir fait le bon test mais simplement je ne l'ai pas fait.

Donc, le seul code que j'ai besoin:

while ($ obj = mysql_fetch_object ($ rs)) { $ arr [] = $ obj; }

$ json_string = json_encode ($ arr); echo ($ json_string);

Encore une fois Tseng, merci.

Questions connexes