Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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? ):
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)
/** * 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
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
Hors ligne
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