Stratégie CHARSET db/view... mb_string et cie
bonjour,
je viens de me mettre au zf.
quelle est la bonne stratégie pour les charset ?
voici ma piste
config.ini
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
[global]
input.encoding = ISO-8859-15 #par exemple
output.encoding = ISO-8859-15 #par exemple
internal.encoding = ISO-8859-15 #par exemple
...
[prod : global]
...
...
database.collation = utf8_swedish_ci
database.charset = utf8
database.encoding = UTF-8
.... |
dans le bootstrap (index.php)
Code:
1 2
|
Zend_Registry::get("db")->getConnection()->exec("SET NAMES '".Zend_Registry::get("config")->database->charset."' COLLATE '".Zend_Registry::get("config")->database->collation."'"); |
donc il faut maintenant bien filtrer ce que je récupère de la base et ce que j'y met...
je pensais décliner une classe Zend_Db pour surcharger la fonction ->quote() et les fonctions de type ->fetch() et glisser des petits mb_convert_encoding() pour convertir entre work.charset et database.charset.
Ensuite utiliser $view->setEscape() pour indiquer une fonction qui utilise mb_convert_encoding() pour convertir vers output.charset. Ou bien décliner Zend_View pour surcharger escape() et ajouter 2 méthodes ->setWorkEncoding() et ->setOutputEncoding() (pour être plus esthétique).
est-ce la bonne stratégie ? l'idée est de pouvoir être très générique bien sûr
comment faites vous ?
EDIT :
et avec mbstring.encoding_translation quelqu'un a testé ? => pas bien
EDIT 2 :
j'ai sous-classer Zend_Db_Adapter_Pdo_Mysql
EDIT 3 :
en mysql le charset latin1 correspond à Windows-1252 en mbstring