Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'ai utilisé la fonction "populate" pour pré-remplir les champs d'un formulaire de mise à jour des informations d'un utilisateur. Ca marche bien mais le problème, c'est que le mot "François" par exemple est foireux : le "ç" est remplacé par un losange noir avec un point d'interrogation.
Ma BDD est en utf8, est-ce de là que vient le problème ?
mon code :
$form = new FormUser(); // ... recuperation de l'id de l'utilisateur connecté dans la variable $idUser $user = new Utilisateurs(); $infos = $user->find($idUser)->toArray(); // le tableau contenant les resultat contient un seul tableau avec les valeur de l'utilisateur $infos = $infos[0]; // je retire la valeur du mot de passe unset($infos['passwd']); // je remplis le formulaire $form->populate($infos);
merci d'avance :-)
Ps : en passant, vous auriez pas une technique plus propre pour recupérer les valeurs d'une ligne de ma table ... :-p
Hors ligne
Le même sujet est évoqué ici: http://www.z-f.fr/forum/viewtopic.php?id=783
La solution se trouve en page 2...
Hors ligne
J'ai tout lu vite fait ... et j'ai testé 2 trucs qui me plaisaient :
code placé dans l'init de mon controler
$this->view->setEscape('htmlentities');
J'affiche "François" autre part dans la page en faisant un "escape" dessus. Ma page HTML est en utf-8 et ça marchait avant ce "setEscape", le "ç" s'affichait normalement.
Maintenant il me met "François" à la fois dans le formulaire ( plus de losange avec point d'interrogation ) et dans le texte normal (alors qu'avant c'était bon).
Du coup, je crois pas que ce soit une bonne solution pour moi ...
Autre essai :
j'ai mit ça dans mon bootstrap juste avant le dispatch ...
iconv_set_encoding('internal_encoding', 'utf-8');
Alors là, ça change rien du tout.
Le "François" dans le texte normal s'affiche bien ... comme avant, et le losange est toujours dans le formulaire ... comme avant
Bref, j'ai pas avancé :-s
J'ai lus la première page en detail, t'as l'air d'en avoir chié avec ce problème Mr.MoOx ...
c'était bien un bug de Zend ou pas ? si oui, le prolbème a-t-il était corrigé ?
Tant que j'y suis, Philippe a posté ça qui a eu l'air de te debloquer :
Philippe a écrit:
Aller modifier le code du ZF, même s'il est buggué, à mon avis c'est pas une bonne idée parce qu'après tu n'osera plus upgrader...
Par contre si tu veux que ton strtolower fonctionne comme un mb_strtolower, tu peux passer le paramètre mbstring.func_overload à 7 dans ta conf php.
Si tu bosses en UTF-8, tu devrais le faire systématiquement.
A+, Philippe
Cependant, j'ai pas compris ce qu'il dit dans ce message ... peut-être y a-t-il une solution à mon problème ?
Hors ligne
Voilà c'est ça.
Tu bosse sur quoi comme serveur, sur un serveur en local?
En fait le truc c'est de modifier ton php.ini
Chez moi vers la ligne 1100 j'ai un truc comme ça
; overload(replace) single byte functions by mbstring functions. ; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(), ; etc. Possible values are 0,1,2,4 or combination of them. ; For example, 7 for overload everything. ; 0: No overload ; 1: Overload mail() function ; 2: Overload str*() functions ; 4: Overload ereg*() functions mbstring.func_overload = 7
Hors ligne
Re-bonjour,
Hier j'ai pas eu le temps de tester, mais là j'ai fait cette manipulation, et ça ne marche toujours pas :-s
"mbstring.func_overload = 7" dans php.ini ne change rien à mon problème ...
Je suis sous windows avec Wamp et le problème est sous firefox 2 et sous IE 6 ( j'ai pas testé d'autre navigateur car je peux pas installer de programme au boulot :-s )
ce losange sous FF2 et ce carré blanc sous IE6 dans mon champ texte me cassent les bonbons :'(
Hors ligne
Bonjour,
J'ai fait une page qui récapitule pas mal de problèmes d'encodages quand tu passes en UTF-8.
http://www.kitpages.fr/php_tutorial_utf8.php
En gros, la grande idée, c'est que tous les éléments de ton appli parlent la même langue (navigateur, apache, mysql, php, système de fichier,...).
A+, Philippe
Hors ligne
Salut Philippe,
J'ai lu ta page parce que j'aimerai bien que mon site soit intégrallement en Utf-8.
J'avais fait la plus part de ce que tu dis, sauf ceci :
<?php $view->setEncoding('utf-8'); ?>
J'ai rajouté ce code dans l'init de mon controleur. Le "populate" prend pour argument le tableau ci-disous (affiché avec Zend_Debug::dump ) :
array(10) { ["idutilisateur"] => string(1) "2" ["nom"] => string(6) "Durand" ["prenom"] => string(9) "François" ["login"] => string(3) "foo" ... }
Le "populate" remplit tout les champs de mon formulaire sauf "François" qu'il laisse vide ( plus de losange avec le ? ) ...
<input type="text" name="prenom" id="prenom" value="">
Que puis-je faire ? et pourquoi tant de haine envers l'utf-8 ?
Ce serai tellement plus simple si l'utf-8 était mit en place par defaut partout :'(
Ps : ja testé d'utiliser utf8_encode et utf8_decode sans trop savoir ce que ces 2 fonctions font.
foreach ( $infos as $key => $value ) { $infos[$key] = utf8_encode($value); } Zend_Debug::dump($infos); die(); // Zend_Debug::dump() renvois le tableau avec "François"
foreach ( $infos as $key => $value ) { $infos[$key] = utf8_decode($value); } Zend_Debug::dump($infos); die(); // Zend_Debug::dump() renvois le tableau avec "Fran�ois"
Si je retire le debug et le die() que ce soit l'un ou l'autre, le formulaire reste vide pour le prénom :'(
Je comprend rien de ce qui se passe :-s
Dernière modification par Jocio (26-06-2008 09:07:10)
Hors ligne
Bonjour Jocio,
Là dessus, je ne peux pas trop t'aider, je n'utilise ni Zend_View, ni Zend_Form... Là c'est assez spécifique à ces éléments du ZF...
A+, Philippe
Hors ligne
Merci quand même d'avoir pris du temps pour m'aider.
Si quelqu'un d'autre à une solution à mon problème, je suis preneur :-)
Hors ligne
J'avais aussi eu ce problème lors de bidouilles similaires à mes debut de Zend_Form...
En plus aujourd'hui j'ai réinstallé mon serveur sur linux et pas besoinde de bidouillé ca marche naturellement.
Par contre sur windows j'avais galéré (je redonne le lien http://www.z-f.fr/forum/viewtopic.php?id=783 j'ai pas trop le temps de faire plus)
Hors ligne
Pages: 1