Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 01-10-2012 09:24:31

Yoldark
Nouveau membre
Date d'inscription: 01-10-2012
Messages: 3

[Résolu][ZF 1.12] Problème de spécial chars dans form select

Bonjour,

Je découvre un peu php zend et dans le cadre d'un projet j'ai du faire un formulaire avec zend qui est constitué d'un select avec 5 options, d'un input text, d'un recaptcha et d'un bouton submit.

Je n'ai aucun problème avec le formulaire si ce n'est qu'il m'a été difficile à le maîtriser pour arriver au résultat.

Je récupère mes options à partir d'une base de donnée, je n'ai aucun problème pour récupérer les données et créer mes options.

Le grand frein est que c'est un site professionnel et que je ne peux pas m'amuser à toucher tout ce que je veux ou faire un fix qui ne résous que les conséquences et non le problème.

Cependant, j'ai un gros problème d'encodage.
Soit les accents s'affichent mal.
Soit j'ai une erreur dans le log apache disant
Citation:

PHP Warning: htmlspecialchars() [<a href='function.htmlspecialchars'>function.htmlspecialchars</a>]: Invalid multibyte sequence in argument in C:\\php\\pear\\Zend\\View\\Abstract.php on line 905

et je me retrouve avec des options sans noms car en retour j'ai le droit à un "undefined".

Je sais que c'est un problème d'encodage, je sais qu'il faut que je passe en utf-8 pour régler le problème. Mais la personne derrière moi n'accepte pas cette option.

Le script sql est en iso-8859-1
la bdd est en iso-8859-1
la connection bdd et les resultats des requetes sont en iso-8859-1

Code:

resources.db.params.charset = "latin1"

ma view est en iso-8859-1

Code:

[lang=php]$this->view->setEncoding('ISO-8859-1');

et le site lui même est en utf-8 (défini dans le charset du layout).

Code:

[lang=html]<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Si je change le méta du layout en iso-8859-1 je n'ai plus de problèmes mais je n'ai pas le droit de le faire, surement car cela risque d'impacter sur le fonctionnement de tout le site.

Si je ne mets pas l'encodage iso-8859-1 sur ma vue j'ai le droit à l'erreur apache + option blanche.

Si je mets ma view en utf-8 pareil.

Pour l'instant les méthodes que j'ai trouve sont :

    de faire un utf8_encode sur la valeur que je dois rentrer dans mon option.
    de changer le layout en iso-8859-1
    de faire un setescape sur ma view ($this->view->setEscape('utf8_encode')
    de changer l'encodage de la base


Réponse aux solutions

    On ne peut pas s'amuser à faire un utf8_encode à chaque fois, ce serait réparer un objet avec du scotch, ça marche au début mais on à toujours le problème.
    On ne change pas le layout, peut avoir un impact inconnu sur le fonctionnement du site provoquant des bugs isolé.
    Si je fais un setescape sur ma view elle ne passe plus par htmlspecialchars et c'est dangereux pour l'intégrité du site.
    Site professionnel donc on ne touche pas à la base de donnée


Donc je suis un peu bloqué, pour moi il est illogique que le site entier soit en utf-8 alors que tout le jeu de données est en iso-8859-1.
Je ne trouve plus de solutions car toutes les solutions sur le net se résument à tout passer en utf-8.

Help !!

Merci d'avance

PS : voici comment je rempli mon select

Code:

[lang=php]$mapper = new Application_Model_NomClasseMapper();
        $options = array();
        $result=$mapper->getDonnees();
        foreach($results as $re) {
            $options[$re->getId()] = $re->getText();
        }
         $multi = new Zend_Form_Element_Select('id', array(
            'label'      => 'test affiché :',
            'MultiOptions' => $options,
        ));

Je ne peux pas donner plus car le code est confidentiel...
J'ai censuré les noms des classes, des fonctions et des variables.

Dernière modification par Yoldark (01-10-2012 15:00:21)

Hors ligne

 

#2 01-10-2012 13:17:56

delorbe
Membre
Date d'inscription: 06-08-2010
Messages: 57

Re: [Résolu][ZF 1.12] Problème de spécial chars dans form select

Salut,

Yoldark a écrit:

Pour l'instant les méthodes que j'ai trouve sont :

    de faire un utf8_encode sur la valeur que je dois rentrer dans mon option.
    [...]


Réponse aux solutions

    On ne peut pas s'amuser à faire un utf8_encode à chaque fois, ce serait réparer un objet avec du scotch, ça marche au début mais on à toujours le problème.
    [...]

J'ai l'impression qu'on te prend un peu pour un mulet, sur ce coup. C'est pas très sympa.
La responsabilité incombe au ou aux développeurs qui ont choisi de combiner l'ISO et l'UTF8.
De ce choix ne peuvent que résulter des problèmes d'encodage, entre les données récupérées de la BDD et l'affichage sur le site.

A cause de ce choix, la seule solution est de procéder à un encodage systématique des données de la BDD en UTF8, pour leur affichage sur le site, et de faire l'inverse pour l'insertion de données de formulaire dans la BDD.

Pour ça, deux solutions :
- Soit tu mets un bout de scotch comme dans ton exemple, si tu ne rencontres ce problème que très rarement, voire pour juste un ou deux formulaires,
- Soit tu te crées un plugin qui fera ça à ta place.

Pour la solution plugin, il s'agit de créer un plugin qui pourrait s'appeler Text, par exemple, et qui contiendrait une méthode acceptant en paramètre d'entrée, ton texte provenant de la BDD (donc en ISO), qui le convertirait en UTF8, et te renverrait le texte encodé.
Au final, au lieu d'écrire un echo $montexte, tu écrirais un echo $Text->convertUTF8($montexte)...

L'avantage c'est que cette solution serait facilement applicable à tous tes problèmes d'encodage sur le site.
L'inconvénient de cette solution, c'est qu'elle ne sert à rien si elle se contente de faire de l'encodage UTF8 smile
En effet, pourquoi faire tout ça, alors qu'il suffirait d'écrire un echo utf8_encode($montexte)...

En tout cas, avec les contraintes qu'on t'a données, ta première solution (encoder le texte provenant de la BDD en UTF8, et non pas toute la page) semble être la seule probable.

Si tu veux davantage d'infos sur le plugin, n'hésite pas.
Le plugin Text que je me suis fait propose un peu d'options que le simple encodage.
Mon projet est connecté à deux BDD : la mienne (en UTF8), et celle de mon client (en ISO).
Je n'ai pas eu le choix non plus, sur l'encodage de la seconde BDD...

Hors ligne

 

#3 01-10-2012 13:34:12

Yoldark
Nouveau membre
Date d'inscription: 01-10-2012
Messages: 3

Re: [Résolu][ZF 1.12] Problème de spécial chars dans form select

Bonjour,

(A noter que dans le mail que j'ai reçu du site les accents sont mal encodé smile).
edit : que sur mon iphone en fait.

En fait les données stocké sur la BDD en ISO sont en UTF8.
C'est à dire que les accents passent mal sur la bdd aussi.

Mais comme il les récupère et les traite comme des données en utf8 il les reconnais et les accents se retrouvent comme il faut.

Par contre quand moi j'ai rentré les données je l'ai fait avec un script donc ce sont bien des accents en iso qu'il y a dans la BDD et non de l'utf8.
Résultat l'utf8 ne reconnais pas les accents et j'ai le droit à une erreur ou si je force l'encodage iso à des accents encodé en iso sur une page en utf8.

J'ai réussi à pointer du doigt le problème. La personne chargé de gérer le projet va se questionner pour savoir ce qu'il est possible de faire ou pas. Car changer l'encodage du base n'est pas possible.

Donc je fini comme solution à rentrer mes données en UTF8 dans la BDD qui vont être stocké en iso (donc 2 charactères pour le é c'est Atild et copyright (é)).
De se fait quand il va les interpréter comme de l'utf8 il va reconnaître ses charactères et bien les interpréter comme des é.

Le problème est que si on veut faire un select * from nomtable where id like "éopla"
ça ne marche pas il faudra faire select * from nomtable where id like "éopla"

Donc on va dire problème résolu.

La bonne solution est de n'avoir qu'un seul type d'encodage pour toute la chaîne de données de la BDD à la page web.

edit: voilà j'ai remplacé mes é par des é dans ma base, et ça fonctionne. (c'est merdique...).

Dernière modification par Yoldark (01-10-2012 13:41:06)

Hors ligne

 

#4 01-10-2012 13:40:22

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: [Résolu][ZF 1.12] Problème de spécial chars dans form select

bonjour,
l'encodage iso-8859-1 a l'air de bien fonctionner au niveau de tes vues. au lieu de le refaire dans chacune des vues il est possible de définir un encodage iso-8859-1 pour toutes tes vues au niveau du bootstap:

Code:

[lang=php]
//dans le bootstrap
 $view = new Zend_View();
    $view->setEncoding('iso-8859-1');
    $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
    $viewRenderer->setView($view);

Hors ligne

 

#5 01-10-2012 13:42:15

Yoldark
Nouveau membre
Date d'inscription: 01-10-2012
Messages: 3

Re: [Résolu][ZF 1.12] Problème de spécial chars dans form select

Même si je force l'encodage, je me retrouve avec des données en iso et une page en utf8. Résulat j'ai pas les bonnes données.

Je stocke mes données en utf8 dans ma bdd iso et ça passe...

Dernière modification par Yoldark (01-10-2012 14:58:33)

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