Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 05-03-2009 13:17:26

BuBBLs
Membre
Lieu: 94 <=> 75
Date d'inscription: 12-03-2008
Messages: 14
Site web

[1.7.5] JSON & UTF-8 en retour Ajax.

Mes chers développeurs bien le bonjour, j'ai une petite question concernant Zend_Json :

Je cherche à lancer un array JSON (en réponse pour jQuery) contenant le résultat d'une petite requête MySQL de données en UTF-8.
Le problème, c'est qu'il me semble que les caractères spéciaux ("é", "è", etc.) se retrouvent wrappés lorsque j'encode
avec Zend_Json::encode().

Juste avant de vous donner mon code :
Est-ce normal ?
Et existe-t-il un moyen de modifier ça ?

Code controlleur : localhost/app/controllers/IndexController.php

Code:

class IndexController extends Zend_Controller_Action
{
    public $contexts = array('list' => array('json'));
    
    public function init() {
        $contextSwitch= $this->_helper->contextSwitch();
        $contextSwitch->setAutoJsonSerialization(false);
        $contextSwitch->initContext();
    }
    
    public function indexAction() {
        /*...*/
    }
    
    public function listAction() {
        $photo = new Photos(); // Classe modèle : Photos qui hérite de Zend_Db_Table
        
        $mesphotos = $photo->fetchAll()->toArray();
        
        $this->view->data = Zend_Json::encode($mesphotos);
        // J'aurais pu mettre le AutoJsonSerialization() à true, mais c'est la même galère.
    }
}

Code vue : localhost/app/views/scripts/modifier/list.json.phtml

Code:

<?= $this->data; ?>

Code jQuery : localhost/public/js/galerie.js (inclus en entête du layout avec également la lib jQuery)

Code:

(function($)
{    
    $(document).ready(function()
    {
        $.getJSON('http://localhost/index/list/format/json', function(data) {
            firsteval = eval(data);
            Phototab(firsteval);
        });
    });
    
    function Phototab(data) {
        $.each(data, function(entryIndex, entry) {
            // Ici j'extrait mes valeurs de ma réponse JSON ex: entry['titre'], entry['nomfichier'], etc
            // Je les insère ensuite dans le document
        }
    }
    
})(jQuery);

De toute façon, même en accédant directement à la requête (http://localhost/index/list/format/json),
la réponse de sortie (JSON) n'est pas en UTF-8 et les caractères spéciaux coupent donc mes titres, descriptifs et autres. Est-il possible que cette sortie soit faite en UTF-8 ?

En remerciant par avance et mille fois aux personnes qui se pencheraient sur ce problème.

@ plus tard.


Vous voulez sauver un arbre ?
Mangez un KsToR !

Hors ligne

 

#2 05-03-2009 13:30:38

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [1.7.5] JSON & UTF-8 en retour Ajax.

Bonjour,

Tu as testé :

Code:

<?= utf8_encode($this->data); ?>

??

De mon côté je procède comme ceci :

controller:

Code:

$response = array(
    'success' => false,
    'title'   => $this->translate->_('Attention : échec'),
    'msg'     => $this->translate->_('ici message')                    
);
Zend_Loader::loadClass('Zend_Json');                                
$this->view->JSONResponse = Zend_Json::encode($response);

Tous les fichiers de mes projets sont encodés en UTF8, la vue n'a donc plus qu'à afficher le réponse.
Avec un utf8_encode() le résultat serait donc le même.

Ensuite dans le JS:

Code:

onComplete: function transResult (response) {             
    BDLoadingIndicator.hideAll(); 
    var JSONResponse = JSON.parse(response.responseText);            
    if (JSONResponse.success) {

    } 
    else {

    }
}

Aucun problème de caractères. Après c'est la balise meta et le navigateur qui font leurs boulots.


A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages