Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [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

Reply #1 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

Reply #2 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

Reply #3 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

Reply #4 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

Reply #5 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 !

 
Page
  1. reponse json et caractères accentués