Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1 2
Salut à tous, je continue d'apprendre Zend_Form et je rencontre un nouveau soucis.
Lorsque je valide mon formulaire avec un champs qui contient des accents, j'obtiens des résultats bizarres à cause des accents:
Nickname ____________ |jos� | ------------- 'josé' is less than 6 characters long ...
Alors je valide et comme vous pouvez le voir, j'ai ma valeur dans le champs qui est foutu et par contre dans le message d'erreur, il est bien...
Un idée ou ai-je découvert un bug?
PS: Tout mon site et mes fichiers sont en utf-8...
EDIT: je fais que changer le nom du post car le bug est ciblé petit à petit
Dernière modification par Mr.MoOx (21-02-2008 09:37:34)
Hors ligne
ça ressemble gros à un problème de charset ça
quel est le charset utilisé dan sle html celui dnas les massage d'erreurs et celui utilisé dans le source ??
A+JYT
Hors ligne
PS: Tout mon site et mes fichiers sont en utf-8...
Il se peut que ça ne soit l'une des raisons de ton problème...
J'ai rencontré que des problèmes d'accents avec l'UTF-8, si bien que j'utilise désormais ISO-8859-1 partout, et ça passe niquel.
Hors ligne
PHP: header("Content-type: text/html; charset=UTF-8"); HTML: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
(Ma base est en utf8 mais bon aucun rapport)
Après j'ai essayé de mettre $view->setEncoding('utf-8'); en plus, mais la value 'jos�' de l'input disparait carrément...
Ce qui est bien étrange, c'est que tout ces sorties sont géré par le rendu Zend_Form... si à la limite y'avait le � partout... mais bon c'est pas le cas...
J'utilise Wamp comme plateforme (donc serveur apache). J'ai rien vu concernant le charset dans httpd.ini et j'ai mis ça dans le php.ini (bien que ça reviennent au header()...)
; PHP's built-in default is text/html
default_mimetype = "text/html"
default_charset = "utf-8"
Là je pige vraiment pas...
Il se peut que ça ne soit l'une des raisons de ton problème...
Ca fait 1 ans et demi que je fais tout mes sites avec son aucun problème... donc je ne penses pas
Puis en iso, les caractères exotiques et asiatiques ne passent pas
Hors ligne
As tu essayer de ressortir avec un htmlentities ?
Hors ligne
Je n'ai aucun controle sur quoi que ce soit vu que tout passe par Zend_Form... qui d'ailleurs fait bien de la merde à mon gout vu qu'il me sort avec et sans bug.... Je debuggerai ça ce soir car là je pige vraiment pas...
Hors ligne
Moox> Met à jour ta copie de travail par subversion.
Zend_Form est modifié environ 3 fois par jour, et des bugs sont souvent corrigés ^^
Hors ligne
Julien a écrit:
Moox> Met à jour ta copie de travail par subversion.
Zend_Form est modifié environ 3 fois par jour, et des bugs sont souvent corrigés ^^
Desole subversion c'est quoi car moi j'ai un bug avec Zend_Form dc je peux la prendre ou la mise a jour ?
MErci
Hors ligne
Sans subversion, c'est par ici: http://framework.zend.com/download/snapshot/
Un peu plus d'infos par là: http://framework.zend.com/manual/fr/int … ation.html
Hors ligne
Alors là j'écris ce message légèrement bourré (saint valentin, champagne etc...) et j'ai mis le nightly build de cette nuit et ça marche toujours pô...
J'en ai marre...
Ca me trou vraiment le cul (pardonné moi l'expression) que ça marche qu'à moitié... Je crois que je vais finir par pleuré
Hors ligne
Bon après un gros pétage de cable à trimé à debugger... Le problème ne vient pas du tout de Zend_Form, mais de Zend_View (pas très étonnant certes)
C'est l'appel à Zend_View::escape() qui me fait tout foiré.
Si ma vue à un encodage en ISO (bien que tout le reste soit en UTF-8, j'ai le problème ci dessus avec le vieux caractère bizarre.
Mais si je dis bien à ma vue UTF-8, ben la valeur disparait comme je l'ai dis. Et elle disparait à cause de escape qui retourne un valeur vide... :
Alors bon j'me suis dis que mon serveur était foireur (Wamp) et donc j'ai voulu reproduire les mêmes circonstances sur une page bidon que voici
$var = 'josã©'; $escape = 'htmlspecialchars'; $encoding = 'UTF-8'; header("Content-type: text/html; charset=UTF-8"); $res = call_user_func($escape, $var, ENT_COMPAT, $encoding); var_dump($res);
Et bien sur là tout est correcte j'obtiens bien josé. Donc je suis en train de pété un cable je pige rien ça me bloque c'est vraiment trop relou j'ai pas l'habitutde de dire ça, mais filez moi une piste sur les raisons de cette bizarrerie...
PS: pour la valeur 'josã©' c'est normal qu'elle soit comme, c'est le navigateur qui envoi ça (testé sous ff et opera) et c'est un comportement normal, mais bon le problème viens pas de la, sinon j'obitendrais la valeur vizarre et pas un champs vide!!!
Hors ligne
Donc après quelques tests suplémentaires, j'en conclu que Zend_Form envoi des valeurs différrentes à Zend_View que les valeurs d'origines (entre la valeur que je débug dans le formText() et mon $_GET['name'], je n'ai pas le même encodage...
Ca m'avance pas trop mais bon...
Hors ligne
Moi avec les accents ça marchent très bien.
mais quand je fait du procédurale vala c'est dit
Sinon avec ZF j'ai essayé mais j'ai le même soucis que toi, càd accent foireux et disparition. Demain je retente.
a++
Dernière modification par Roulio (18-02-2008 20:57:38)
Hors ligne
Bon j'ai du nouveau : j'ai récupéré le dernier snapshoot (celui d'aujourd'hui : 8205) j'ai créé un formulaire simple
je dump les données et elles sont toutes correctement affichées.
Précisions :
- mes vues sont encodées en UTF-8
- mes contrôleurs sont en ANSI
- je n'utilise pas d'escape
Pour le problème que j'avais c'était une erreur d'encodage d'un fichier de vue
Est ce que tes champs passent par une validation ou un filtre précis ?
Hors ligne
Moi j'ai tout en UTF-8
Je n'utilise pas escape non plus, mais Zend_Form oui quand il réaffiche la valeur dans l'input!
Regarde le screenshot de mon debuggage: lorsque la value="" de l'input est escapé (chose totalement normal pour un attribut html) le bug arrive. Ca ne viens pas de mes fichiers...
Je testerais ce soir des désactiver tous les filtres (j'ai même pas pensé à ça... quoique même pas sur que à part StringTrim il y est quelques choses)...
Je mettrai à jour le snapshot aussi.
A ce soir
Hors ligne
Bon alors j'ai commencé par testé avec ce code http://zend-form.tjeu.be/user/signup et ça a très bien marché. Ensuite j'ai testé en mettant à jour la librairie utilisé avec le snapshot, et la c'est le drame. Exactement le même soucis.
Je sais pas si je l'ai dis, mais ce bug n'arrive que pour les input, quand la value est réaffiché suite à une erreur (c'est la qu'elle est automatiquement escapé).
J'ai fais activé mon compte sur le bug tracker pour pouvoir posté mon problème...
@Roulio: Si ton code marche, pourrais tu m'envoyer tout ton code (archivé) que je puisse jeter un coup d'oeil?
Hors ligne
NOM D'UN CHIEN
J'ai désactiver les filtres (enfin le seul filtre que j'avais mis, StringToLower) et (bonne?) surprise, plus de bug. En même temps je suis content, mais en même temps il reste un soucis...
J'ai testé plusieurs filtres (StringTrim, StringToLower, StringToUpper), seul StringToLower provoque le bug.
Ayant regardé le code de StringToLower et StringToUpper je suis étonné que seul StringToLower bug vu que y'a vraiment rien de différent... mb_strtolower me voudrait il du mal??
ps: Vivement que j'arrête de monologué sur ce post... -_-
Dernière modification par Mr.MoOx (21-02-2008 00:57:40)
Hors ligne
je viens de testé avec les mêmes conditions que toi (sauf encodage ANSI pour les controllers) et s'est bien l'utilisation de StringToLower qui pose problème. Apparemment tu as déjà regardé le code, je vais quand même y jeter un oeil.
Hors ligne
essaye ça dans une vue, c'est l'exemple donné dans le manuel php. Ca confirme que le problème d'accent vient de la fonction strtolower.
$str = "Marie A un Petit Agneau, et l'aime TRès fORt."; $str = strtolower($str); echo $str; // marie a un petit agneau, et l'aime très fort.
ils ont commenté le résultat "théorique" mais dans notre cas on aura "marie a un petit agneau, et l'aime tr�s fort."
Dernière modification par Roulio (21-02-2008 09:40:00)
Hors ligne
Ouais tu as raison c'est juste strtolower et pas mb_strtolower j'ai regardé trop vite le code.
header('Content-Type: text/html; charset=utf-8'); $str = "Marie A un Petit Agneau, et l'aime TRès fORt."; $str = mb_strtolower($str,'utf-8');
Ce code là marche bien.
Maintenant reste à trouvé pourquoi c'est pas mb_strtolower qui n'est pas appellé alors que je défini bien l'encoding à la vue (Zend_View::setEncoding()).
On y est presque.
Hors ligne
Mes connaissances dans le fonctionnement de ZF s'arrête là car je ne sais pas comment ZF gère l'appel de la méthode setEncoding de la classe Zend_Filter_StringToLower.
la méthode barbare serait de remplacer strtolower en mb_strtolower !?! si tu utilise que de l'utf-8. je dit ça sans connaître les dommages collatéraux.
Dernière modification par Roulio (21-02-2008 10:09:40)
Hors ligne
Merci du conseille de viking
Je trouverais la méthode propre (quand on cherche on trouve toujours!) avec un coup de debugger ce soir (si j'ai le temps)
Hors ligne
Pages: 1 2