Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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
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
<?= $this->data; ?>
Code jQuery : localhost/public/js/galerie.js (inclus en entête du layout avec également la lib jQuery)
(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.
Hors ligne
Bonjour,
Tu as testé :
<?= utf8_encode($this->data); ?>
??
De mon côté je procède comme ceci :
controller:
$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:
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.
Hors ligne
Pages: 1