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.
    }
}
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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

Code:

<?= $this->data; ?>
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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);
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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); ?>
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

??

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);
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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 {

    }
}
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

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