- 1
[Opened] reponse json et caractères accentués
Posted by foxmask on 03/30/2011 23:42
Bonsior,
Je viens de mettre en place ceci http://jqueryui.com/demos/autocomplete/#remote
Mais dans mon contrôleur, au moment où jQuery va récupérer les données pour m'afficher la liste correspondante (pour compléter), les données avec caractères accentués sont remplacés par null.
Mes données sont stockées en UTF-8.
voici le bout de code du contrôleur
<code> function getCities() { $rep = $this->getResponse('json'); $rep->data = array(); if (jAuth::isConnected()) { $datas = jDao::get('cities')->findAll(); foreach ($datas as $data) $rep->data[] = json_encode($data->name); } return $rep; }</code>
si je n'utilise pas json_encode ; j'ai une erreur javascript sur jQuery et pour cause ; dans la réponse les headers donnent :
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
ya moyen de forcer le charset pour la reponse type json ?
@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !
[Opened] reponse json et caractères accentués
Posted by laurentj on 03/31/2011 13:57
Salut,
Pourquoi faire toi-meme le json_encode alors que la réponse json le fait automatiquement ? ton problème vient du fait qu'au final, ton contenu est json encodé deux fois, et probablement qu'au passage, les caractères sautent.
Bref, enlève ton json_encode.
[Opened] reponse json et caractères accentués
Posted by foxmask on 03/31/2011 15:40
je la refais :) Actuellement la methode du controleur n'a pas json_encode car comme tu l'as dit ca encode 2 fois donc j'ai deux fois la paire de double quote.
Le problème d'affichage de "null" à la place des noms de ville survient quand je fais juste ca :
<code> function getCities() { $rep = $this->getResponse('json'); $rep->data = array(); if (jAuth::isConnected()) { $datas = jDao::get('cities')->findAll(); foreach ($datas as $data) $rep->data[] = $data->name; } return $rep; }</code>
à ce moment là ; dans firebug je constate que mon charset est en ISO ... (comme mis plus haut) Pourtant tout est en utf8 des sources jusqu'au browser en passant par l'apache.
@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !
[Opened] reponse json et caractères accentués
Posted by laurentj on 04/01/2011 10:20
ah oui désolé.
ya moyen de forcer le charset pour la reponse type json ?
comme pour tout objet reponse, tu peux ajouter tous les headers http que tu veux, y a une méthode pour ça, addHttpHeader.
peut-être faudrait-il que ce soit automatique...
[Opened] reponse json et caractères accentués
Posted by foxmask on 04/05/2011 23:47
Après vérification,
c'est la requête qui "part" en ISO
requête
Host localhost User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0 FirePHP/0.5 Accept application/json, text/javascript, */*; q=0.01 Accept-Language fr-fr,en;q=0.5 Accept-Encoding gzip, deflate Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive 115 Connection keep-alive X-Requested-With XMLHttpRequest Referer http://localhost/ Cookie PHPSESSID=rneksve2d90j6ehrs6o6essla4 x-insight activate
la réponse est "telle quelle" :
réponse
Date Tue, 05 Apr 2011 21:41:57 GMT Server Apache/2.2.11 (Win32) PHP/5.3.0 X-Powered-By PHP/5.3.0 Expires Thu, 19 Nov 1981 08:52:00 GMT Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma no-cache Content-Length 282 Keep-Alive timeout=5, max=99 Connection Keep-Alive Content-Type application/json
du coup qd bien meme j'ajouterai de l'utf-8 à la réponse ca sert à rien :/
<code> function getCities() { $rep = $this->getResponse('json'); $rep->addHttpHeader('Content-Type','text/plain; charset=utf-8'); $rep->data = array(); if (jAuth::isConnected()) { $datas = jDao::get('teg~teg_region')->findAll(); foreach ($datas as $data) //UTF-8 with éàèù etc is dropped to null in json response $rep->data[] = $data->name; } return $rep; }</code>
@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !
[Opened] reponse json et caractères accentués
Posted by foxmask on 04/06/2011 00:12
je suis arrivé à mes fins en faisant un coup de iconv
$rep->data[[]] = iconv('ISO-8859-1','UTF-8//TRANSLIT',$data->name);
les accents sont encodés dans la reponse json mais correctement "rendu" dans la liste produite.
@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !
- 1