Carnet Wiki

utf8 vrac de notes à deboguer

Version 2 — Janvier 2013 JLuc

Interviennent les paramètres suivant, dont il faut s’assurer qu’ils restent toujours en phase :

Pour les données :
-  le codage de la table dans la base de donnée
-  le codage de la base de donnée (est-ce utile vraiment, si on connait le codage de la table ?)
-  le codage du transfert, lorsqu’il y a transfert. (c’est quoi cette notion au juste ?)
-  le codage du CONTENU de la table, qui en cas d’erreur à une étape peut être différent de celui théorique (indiqué par le codage de la table)

Pour le source :
-  le codage du fichier (ISO, utf8 avec ou sans bom...). Pour SPIP (càd les .html ?) il faut le BOM, mais il ne le faut pas pour les fichiers php. A noter que php n’élimine pas le bom lors d’un include().
-  la manière avec laquelle l’éditeur de texte comprend l’encodage du fichier.

Erreurs possibles

- déclarer quelquepart utf-8 alors qu’il faut écrire UTF-8 ou UTF8 ou utf8
-  l’inverse et toutes les variations possibles

À php on dit mb_internal_encoding("UTF-8");
mais à MySql on dit SET NAMES 'utf8'

- des données ou du code en utf8 dans un contenant déclaré en ISO
-  des données ou du code en ISO dans un contenant déclaré en uf8

- un contenant en utf8 lu ou analysé par un outil qui croit que c’est de l’ISO
-  un contenant en ISO lu ou analysé par un outil qui croit que c’est de l’utf8

Par ailleurs, les fichiers déclarés comme utf8 peuvent avoir un BOM ou ne pas en avoir.

Cela introduit une autre source d’erreur :
-  un fichier créé sans BOM ou analysé par un outil qui croit qu’il y a un BOM ou qui a besoin qu’il y en ait un, alors que le fichier n’en a pas.
-  l’inverse et toutes les variations possibles.

Outils de dépatouillage avancé

Faire connaissance avec des caractères accenctués (ou d’autres caractères spéciaux ?) et la manière symptomatique avec laquelle ils se présentent en cas d’erreur.

C’est à dire : apprendre à lire les hiéroglyphes.

Se documenter sur comment l’ISO et l’utf8 codent les caractères accenctués et autres caractères spéciaux.

Données :
-  regarder le contenant : codage déclaré pour une table
-  regarder le contenu (comment ? avec quel outil et comment régler cet outil pour qu’il n’introduise pas de biais supplémentaires ? ) : y a t il des caractères bizares ? les caractères bizarres ressemblent ils à des hiéroglyphes connus, comme de l’utf8 regardé dans une page ISO ou le contraire ?

Code :
-  idem

Fonctions PHP

Voir http://php.net/manual/fr/ref.mbstring.php

- quelles fonctions de chaine classiques fonctionnent bien avec l’utf8 ?

  • str_replace ?
  • preg_replace ?
  • trim ?
  • strlen ?
  • strpos ?
  • etc ?

- quelles fonctions exigent par contre une fonction mb_truc ?

On peut supposer que toutes les fonctions qui ont une contrepartie mb_truc ne sont pas compatibles avec l’utf8.

- comment traduire un preg_replace en un mb_ereg_replace et à quoi faire attention ?

Recommandations

- Regarder en particulier la fonction mb_internal_encoding(« UTF-8 ») ; http://php.net/manual/fr/function.mb-internal-encoding.php

- Aussi : mb_http_output http://php.net/manual/fr/function.mb-http-output.php