Page 1 sur 1

passage à l'utf8

Posté : 22 févr. 2008, 00:39
par BeRoots
salut à tous :)

je suis en train de passer tout mon projet à utf8. je me suis appuyer sur ce tutoriel utf8 & PHP assez bien fait.

j'ai dors et dejà ceci:
  • - toutes table et db MySQL passer en utf8_general_ci
    - mysql parametré par default avec jeu de caractère utf-8 et un interclassement pour les connexion en utf8_general_ci
    - tout mes scripts php utilise htmlentities via UTF-8 pour les affichages coté navigateur
    - apres chaque mysql_select_db, je fais un SET NAMES UTF8
    - inclusion au httpd.conf de AddDefaultCharset UTF-8 et d'un httpd-languages.conf contenant la liste des AddCharset dont utf-8
    - ajout de la meta <meta http-equiv="Content-type" content="text/html; charset=UTF-8"/> au html
    - activation de mbstring dans le php.ini avec les parametre UTF-8 du tuto
plusieur question s'offre à moi en vue des differnet problème rencontrer (probleme de taille de chaine recupèrer via mysql, problème de traduction de catactère issue de db...)

1°) est ce que mbstring est obligatoire en vue d'utf8 ?
2°) est ce que je doit obligatoirement réencoder touts mes script php en utf8 ? (j'utilise ConTEXT comme editeur pour develloper et en presisant unicode, j'ai affichage coté navigateur de tout le code PHP via une multitude de "?")
3°) lorsque je ne fait pas le SET NAMES UTF8, tout fonctionne bien mais lorsque je le fait, j'ai des soucis avec tout ce qui est issue de db (difference de longueur de chaine, caractère non reconnu...)
Est ce qu'il est obligatoire de faire ce SET NAMES UTF8 même si j'ai mon paramètrage mysql definit en UTF8 pour la connexion et le jeu de caractère mysql ?
4°) est ce qu'il y a des paramètre pour utf8 à ettre à jour dans le my.ini ?

merci d'avance pour vos differents conseils avisé :)

Re: passage à l'utf8

Posté : 22 févr. 2008, 02:32
par Nagol
Réponse dans le texte
salut à tous :)

je suis en train de passer tout mon projet à utf8. je me suis appuyer sur ce tutoriel utf8 & PHP assez bien fait.

j'ai dors et dejà ceci:
  • - toutes table et db MySQL passer en utf8_general_ci
    - mysql parametré par default avec jeu de caractère utf-8 et un interclassement pour les connexion en utf8_general_ci
    - tout mes scripts php utilise htmlentities via UTF-8 pour les affichages coté navigateur
    - apres chaque mysql_select_db, je fais un SET NAMES UTF8
    - inclusion au httpd.conf de AddDefaultCharset UTF-8 et d'un httpd-languages.conf contenant la liste des AddCharset dont utf-8
    - ajout de la meta <meta http-equiv="Content-type" content="text/html; charset=UTF-8"/> au html
    - activation de mbstring dans le php.ini avec les parametre UTF-8 du tuto
plusieur question s'offre à moi en vue des differnet problème rencontrer (probleme de taille de chaine recupèrer via mysql, problème de traduction de catactère issue de db...)

1°) est ce que mbstring est obligatoire en vue d'utf8 ?

mbstring est utilisée quand un caractère est représenté sur plusieurs octets ce qui est une particularité d'utf8 donc à priori je dirais obligatoire non, fortement conseillé oui

2°) est ce que je doit obligatoirement réencoder touts mes script php en utf8 ? (j'utilise ConTEXT comme editeur pour develloper et en presisant unicode, j'ai affichage coté navigateur de tout le code PHP via une multitude de "?")

Tu as deux utilitaires sous linux/unix qui permettent de se charger des noms de fichiers sur le système (il s'agit de convmv) qui autorise le renomage récursif des répertoires et fichiers. Et pareillement pour le contenu des fichiers tu peux utiliser la commane iconv disponible normalement en natif sur un système récent. J'ai personellement eu de bons résultats avec :)

3°) lorsque je ne fait pas le SET NAMES UTF8, tout fonctionne bien mais lorsque je le fait, j'ai des soucis avec tout ce qui est issue de db (difference de longueur de chaine, caractère non reconnu...)
Est ce qu'il est obligatoire de faire ce SET NAMES UTF8 même si j'ai mon paramètrage mysql definit en UTF8 pour la connexion et le jeu de caractère mysql ?

Je pense que c'est normal, ca fait partie des conséquences de l'utilisation d'utf8, entre les modules mbstring et iconv de php tu devrais avoir un panel de fonctionalité suffisante pour adapter ton code.

4°) est ce qu'il y a des paramètre pour utf8 à mettre à jour dans le my.ini ?

Tu peux spécifier le charset de toutes les interractions avec ton serveur mysql voici un exemple qui te donnera une idée:

Code : Tout sélectionner

# The following options will be passed to all MySQL clients [client] #password = your_password port = 3306 socket = /var/run/mysqld/mysqld.sock default-character-set=utf8 [mysql] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [mysqladmin] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [mysqlcheck] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [mysqldump] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [mysqlimport] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [mysqlshow] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [myisamchk] character-sets-dir=/usr/share/mysql/charsets [myisampack] character-sets-dir=/usr/share/mysql/charsets # use [safe_mysqld] with mysql-3 [mysqld_safe] err-log = /var/log/mysql/mysql.err # add a section [mysqld-4.1] or [mysqld-5.0] for specific configurations [mysqld] character-set-server = utf8 default-character-set = utf8 user = mysql port = 3306 socket = /var/run/mysqld/mysqld.sock pid-file = /var/run/mysqld/mysqld.pid log-error = /var/log/mysql/mysqld.err basedir = /usr datadir = /thor/sys/mysql skip-locking key_buffer = 16M max_allowed_packet = 1M table_cache = 64 sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M language = /usr/share/mysql/english (..)
merci d'avance pour vos differents conseils avisé :)
En espérant que ca t'aide

Re: passage à l'utf8

Posté : 22 févr. 2008, 13:36
par BeRoots
Réponse dans le texte

2°) est ce que je doit obligatoirement réencoder touts mes script php en utf8 ? (j'utilise ConTEXT comme editeur pour develloper et en presisant unicode, j'ai affichage coté navigateur de tout le code PHP via une multitude de "?")

Tu as deux utilitaires sous linux/unix qui permettent de se charger des noms de fichiers sur le système (il s'agit de convmv) qui autorise le renomage récursif des répertoires et fichiers. Et pareillement pour le contenu des fichiers tu peux utiliser la commane iconv disponible normalement en natif sur un système récent. J'ai personellement eu de bons résultats avec :)

en gros je suis donc obliger de travailler avec des fichiers entièrement codé en utf8 et un ardorescence coder elle aussi en utf8 ?

3°) lorsque je ne fait pas le SET NAMES UTF8, tout fonctionne bien mais lorsque je le fait, j'ai des soucis avec tout ce qui est issue de db (difference de longueur de chaine, caractère non reconnu...)
Est ce qu'il est obligatoire de faire ce SET NAMES UTF8 même si j'ai mon paramètrage mysql definit en UTF8 pour la connexion et le jeu de caractère mysql ?

Je pense que c'est normal, ca fait partie des conséquences de l'utilisation d'utf8, entre les modules mbstring et iconv de php tu devrais avoir un panel de fonctionalité suffisante pour adapter ton code.

et ce, sans faire de SET NAMES UTF8 ?

4°) est ce qu'il y a des paramètre pour utf8 à mettre à jour dans le my.ini ?

Tu peux spécifier le charset de toutes les interractions avec ton serveur mysql voici un exemple qui te donnera une idée:

n'y a t'il pas un paramètre global pour avoir Mysql en full utf8 ? et sinon comment puis-je faire pour avoir tout en utf8 ?

Code : Tout sélectionner

# The following options will be passed to all MySQL clients [client] #password = your_password port = 3306 socket = /var/run/mysqld/mysqld.sock default-character-set=utf8 [mysql] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [mysqladmin] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [mysqlcheck] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [mysqldump] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [mysqlimport] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [mysqlshow] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [myisamchk] character-sets-dir=/usr/share/mysql/charsets [myisampack] character-sets-dir=/usr/share/mysql/charsets # use [safe_mysqld] with mysql-3 [mysqld_safe] err-log = /var/log/mysql/mysql.err # add a section [mysqld-4.1] or [mysqld-5.0] for specific configurations [mysqld] character-set-server = utf8 default-character-set = utf8 user = mysql port = 3306 socket = /var/run/mysqld/mysqld.sock pid-file = /var/run/mysqld/mysqld.pid log-error = /var/log/mysql/mysqld.err basedir = /usr datadir = /thor/sys/mysql skip-locking key_buffer = 16M max_allowed_packet = 1M table_cache = 64 sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M language = /usr/share/mysql/english (..)
En espérant que ca t'aide
merci d'avance pour ces complements d'information ;)

[EDIT] j'ai apparament touts mes problème liés à utf8 sur les variables php issue de chaines en db...
un var_dump de mes variables issue de db me donne une longeur de chaine plus longue que la normal malgré que le echo de celles-ci soit correcte point de vue affichage?
j'ai fait un mb_check_encoding($var, 'utf8') sur l'une de ces variables et cela me retourne que la variable est bien au format utf8. mon problème est que je doit la réencoder pour utilisation dans des fonction tel que mcypt ou preg_match et je voudrai savoir en quel format je doit les réencoder???
Si quelqu'un a une idée sur ce problème ? :-k

Posté : 23 févr. 2008, 18:32
par Invité
j'ai toujour le même problème en vue de variable issue de db (en utf8) et qui deuvent être utiliser via mcrypt...

le problème est que je ne trouve pas quel encodage utiliser pour mcrypt. avant j'utilisait latin1_general_ci pour la db dans laquel sont stocker mes clé/vecteur et cela fonctionnai bien. maintenant, avec des clé/vecteur utf8 issue de db j'ai cette erreur:
Warning: mcrypt_encrypt() [function.mcrypt-encrypt]: Size of key is too large for this algorithm .... on line 154
Warning: mcrypt_encrypt() [function.mcrypt-encrypt]: The IV parameter must be as long as the blocksize .... on line 154
j'ai beau essayer via differents encodage comme ascii ou iso-8859-15 mais ce coup la mes clé/vecteur sont éronnés (mauvais remplacement des differents caractère accentuer)

si quelqu'un a une idée à me soumettre pour pourvoir convertir l'encodage utf8 de mes clé/vecteur en un encodage propre à l'utilisation de fonction tel que mcrypt (par moyen de trouver l'encodage adequat)?

merci d'avance :)