Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 14-05-2009 14:55:11

fatahou
Membre
Lieu: La Rochelle - France
Date d'inscription: 23-04-2009
Messages: 31

MS SQL SERVER 2005 et UTF-8

Bonjour à tous,

je viens de passer presque 2 jours sur un problème de charset et l'UTF8 pour un projet zend qui utilise MSSQL.

La plupart des exemples que l'ont vois sur Internet pour l'accès aux données en UTF8 avec ZF utilisent MySQL. Quand on cherche à résoudre le problème on vous dit alors qu'il faut exécuter "SET NAMES 'UTF8'" avant chaque connexion. Cette instruction et l'UTF8 n'est pas supporté par MSSQL à priori.

J'ai utilisé un moyen simple mais long pour éviter de se taper un tas de configuration (sur APACHE?,PHP?,FICHIER DE CONFIG DU DRIVER PDO? LE BOOTSRTAP ZF? ):


Code:

        
public function listevecteursAction(){
        $this->db->setFetchMode(Zend_Db::FETCH_ASSOC);

        $result = $this->db->fetchAll('select VECTEUR_ID AS id, NOM_VECTEUR AS libelle from INCIDENTS_VECTEURS');

        $data = new Zend_Dojo_Data('id', Outils::utf8_encode_mix($result), 'libelle');

          suite........
    }

Zend_Db::FETCH_ASSOC Demande à zend de retourner un tableau (man: http://framework.zend.com/manual/fr/zen … fetch-mode).
Outils::utf8_encode_mix($result) est une méthode statique qui convertit une chaine ou un tableau "Array" en UTF8 (tirée de la page Internet de manuel de PHP pour utf8_encode). J'ai placé utf8_encode_mix dans une classe "Outils.php" dans le répertoire des Models (MVC)


La fonction Outils::utf8_encode_mix($result)

Code:

        /**
        * Encode en UTF des données d'un tableau assoc ou une chaine de caractères
        * @param    mixed    $input An array, associative or simple
        * @param    boolean  $encode_keys optional
        * @return    mixed     ( utf-8 encoded $input)
        */
        public static function utf8_encode_mix($input, $encode_keys=false)
        {
            if(is_array($input))
            {
                $result = array();
                foreach($input as $k => $v)
                {               
                    $key = ($encode_keys)? utf8_encode($k) : $k;
                    $result[$key] = Outils::utf8_encode_mix( $v, $encode_keys);
                }
            }
            else
            {
                $result = utf8_encode($input);
            }
    
            return $result;
        }

Avez vous une technique aussi optimisée qu'avec MySQL, quelque chose de moins long?

Hors ligne

 

#2 14-05-2009 16:10:25

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: MS SQL SERVER 2005 et UTF-8

J'ai l'impression que UTF-8 et SQL server ne font pas bon ménage :
http://support.microsoft.com/kb/232580/fr
L'article est un peu vieux, mais en fouillant un peu dans Google, j'ai l'impression que beaucoup de gens ont le problème et personne ne l'a résolu de façon satisfaisante...

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#3 15-05-2009 08:57:37

fatahou
Membre
Lieu: La Rochelle - France
Date d'inscription: 23-04-2009
Messages: 31

Re: MS SQL SERVER 2005 et UTF-8

J'ai coché "information non satisfaisante". Cela devrait être beaucoup plus simple que de passer par UTF8_encode (php). Aussi simple que mysql ou postgre. Mais bon c'est M$ et les formats.

Au moins ça a l'avantage de donner du boulot aux développeurs.

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