Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour
Je remplis les champs d'un élément select à partir de ma base de données Postgresql codée en UTF8.
$famille = new Zend_Form_Element_Select('famille'); $famille->setLabel('Famille') ->addMultiOption('','') ->setRequired(true) ->addFilter('StripTags'); $familles = new tbFamilles(); $liste = $familles->fetchAll($familles->select()->order('famille')); foreach ($liste as $familles): $famille->addMultiOption($familles->famille,$familles->famille); endforeach;
Les caractères spéciaux ne s'affichent pas correctement.
Dernière modification par ziedb (20-07-2009 14:00:02)
Hors ligne
ta vue est en utf 8 ?
Hors ligne
Zend_Form utilise les fonctions mb_string si possible, donc ton serveur doit donc être bien configuré en UTF-8.
Plusieurs posts de nos forums abordent déjà ce point.
Hors ligne
Oui ma vue est en UTF8
$this->view->setEscape('utf8_encode');
Ma BD aussi.
Hors ligne
Quel paramètre faut-il vérifier?
Hors ligne
Des trucs du genre
http://fr.php.net/manual/fr/iconv.configuration.php
http://fr.php.net/manual/fr/mbstring.configuration.php
Tu peux lire ça par exemple http://www.phpwact.org/php/i18n/charsets
Hors ligne
J'ai trouvé que ces paramètres sont désactivés
;iconv.input_encoding = ISO-8859-1
;iconv.internal_encoding = ISO-8859-1
;iconv.output_encoding = ISO-8859-1
; internal/script encoding.
; Some encoding cannot work as internal encoding.
; (e.g. SJIS, BIG5, ISO-2022-*)
;mbstring.internal_encoding = EUC-JP
; http input encoding.
;mbstring.http_input = auto
; http output encoding. mb_output_handler must be
; registered as output buffer to function
;mbstring.http_output = SJIS
Faut-il les activer?
Dernière modification par ziedb (21-07-2009 11:24:12)
Hors ligne
J'ai encore le même problème et j'ai une question supplémentaire :
Quand j'écris dans mon champ textarea 'Démarrage Nouvelle...'
Quand je fais la validation et que j'ai des erreurs, je fais lke truc classique un populate et je réffiche mes données j'obtiens dans mon champ
Démarrage Nouvelle...
Hors ligne
J'ai fait cette manip
// je récupère les données depuis la base sous forme de tableau ... $data= $ma_table->getliste(); $form->populate($data); ... $this->view->data=$data $this->view->form=$form
Ensuite dans ma vue, je fait
print_r($this->data); echo $this->form;
La première m'affiche bien les données du tableau en UTF8, par contre mon form n'affiche pas correctement les caractères spéciaux.
Avez-vous une idée sur le sujet, svp c'est vraiment urgent?
Entre autre, dans la définition de mon form, j'ai mis
$this->setEnctype('utf8_encode');
Est-ce que cette utilisation est juste? Normalement ça devrait résoudre le problème mais ça ne marche pas.
Hors ligne
Peut etre une piste de réponse http://www.z-f.fr/forum/viewtopic.php?id=783
Hors ligne
J'ai essayé ça n'a pas marché
Hors ligne
Hello,
entype != encoding
enctype : "multipart/form-data" | "application/x-www-form-urlencoded" | "text/plain"
Dans ton cas, c'est l'encodage des caractères qui ne va pas. Vraisemblablement, le lien fourni par aelyta1 devrait te renseigner.
A+
Hors ligne
mikaelkael a écrit:
Hello,
entype != encoding
enctype : "multipart/form-data" | "application/x-www-form-urlencoded" | "text/plain"
Dans ton cas, c'est l'encodage des caractères qui ne va pas. Vraisemblablement, le lien fourni par aelyta1 devrait te renseigner.
A+
Merci ça m'a échappé et pourtant je l'utilise déjà.
Je suis tellement stressé par ce problème.
J'ai essayé en fait d'appliquer ce qu'il y a dans le lien d'aelyta1 mais ça ne marche pas.
J'ai même changé mon wamp par Zend Server CE et ça ne marche pas!
Hors ligne
le module suivant apache est désactivé
#LoadModule charset_lite_module modules/mod_charset_lite.so
Ce module a t-il un impact sur mon problème?
A quoi ça sert exactement?
Merci
Hors ligne
Pour l'instant j'ai fait un simple filtre de remplacement.
Quelqu'un a-t-il une solution radicale?
Hors ligne
Bien (re)configurer tout ton serveur qu'il soit bien en UTF-8 (aussi bien apache que php), tes base de données, l'encodage de chaque fichier en UTF-8 (sans BOM de préférence), ainsi que la sortie HTML.
Hors ligne
Voici le résumé de mon code , un truc très classique
if ($this->_request->isPost()) { $formdata = $this->_request->getPost (); if ($form->isValid($formdata)) { // si les données sont valides , j'insère dans ma base de donnée $res = new mRessources(); $res->nvRes($form->getValues()); }else { //sinon, je fais un form populate et j'alerte l'utilisateur $form->populate($formdata); $this->view->message = 'Veuillez vérifier vos données.'; } }
Point1 -
Dans le cas où les données sont valides, elles sont insérées correctement dans la base, y compris les caractères accentués. C'est la preuve que les caractères sont bien interprétés par mon formulaire et qu'il n'y a pas de distortion lors de la communication entre l'application et la base et que l'UTF 8 est bien configuré au niveau d'apache et de postgresql.
Par contre, lorsque je fais $form->populate($formdata), c'est juste à ce niveau là que les cacatères acentués sont mal affichés.
Point 2 -
Bien que j'utilise $db->quote($formdata['notes']) dans l'élaboration de mon statement, les apostrophes sont toujours précédées par des antislash '\'
exemple aujourd'hui devient aujourd\'hui
Pour vérifier, j'ai essayé d'afficher les données directement récupérées de mon form. J'ai le même phénomène.
Hors ligne
point 2:
regarde dans ton php.ini et désactive magic_quotes si c'est activé.
Hors ligne
nick a écrit:
point 2:
regarde dans ton php.ini et désactive magic_quotes si c'est activé.
Voici ma config
; Magic quotes for incoming GET/POST/Cookie data. magic_quotes_gpc = On ; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc. magic_quotes_runtime = Off ; Use Sybase-style magic quotes (escape ' with '' instead of \'). magic_quotes_sybase = Off
Si j'ai bien compris, il s'agit du premier paramètre qui gère les POST/GET/Cookie Data : il faut le mettre à OFF?
Hors ligne
Merci Nick et Philippe
ça marche bien pour le point 2.
Il me reste encore le point 1. J'ai tout fait ça me rend fou.
Hors ligne
point 1. : "Veuillez vérifier vos données" s'affiche correctement ? Et si tu supprimais ton "populate", car il est déjà réalisé par l'action isValid au dessus
Hors ligne
nORKy a écrit:
point 1. : "Veuillez vérifier vos données" s'affiche correctement ?
Oui
nORKy a écrit:
Et si tu supprimais ton "populate", car il est déjà réalisé par l'action isValid au dessus
Non ça ne marche pas
Hors ligne
ziedb a écrit:
nORKy a écrit:
point 1. : "Veuillez vérifier vos données" s'affiche correctement ?
Oui
nORKy a écrit:
Et si tu supprimais ton "populate", car il est déjà réalisé par l'action isValid au dessus
Non ça ne marche pas
t'as essayé de te pendre ?
Hors ligne