Monthly Archives: February 2012

L’encodage UTF8

L’UTF-8 est un encodage permettant de gérer bien plus de caractères que l’ISO, limité à seulement 256. Il est universel et couvre aussi bien les caractères latins que cyrilliques, arabes, japonais…

Détecter et corriger les erreurs d’encodage

1 – Si vous rencontrez des caractères de ce type : ÀÁÂÃÄÅà áâãäåÒÓÔÕÖØòóôõöøÈÉÊËéèêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ

C’est que vos données sont bien encodées en UTF-8 mais qu’elles ne sont pas affichées comme tel (=> voir la partie “L’affichage de vos données“)

2 – Si vous rencontrez des “�” c’est que vos données ne sont pas encodées en UTF-8 (=> voir la partie “Les sources des données“)

Les sources de vos données

L’encodage et MySQL

  • Pour préciser au serveur que vous allez communiquer avec lui en UTF-8, exécutez cette requête directement après chaque connexion :  SET NAMES ‘utf8′

Exemple avec la préparation d’une requête :

$sqlutf=”SET NAMES UTF8″;
$reponse = $bdd->prepare($sqlutf);
$reponse->execute();

  • Pour la définition de vos colonnes de table, utilisez le plus souvent comme Interclassement : utf8_general_ci.

Vos fichiers aussi doivent être encodés

Encodez toujours vos fichiers en UTF-8.

En outre, vos fichiers ne doivent pas contenir de BOM. Ce caractère “invisible” spécifique à l’unicode est parfois ajouté en début de fichier par votre éditeur et peut être source de perturbations. En effet, bien qu’il s’agisse d’un caractère invisible il aura pour effet, par exemple dans un script php, d’envoyer et clore l’entête HTTP et débuter l’envois du corps de celle-ci.

  • ÉDITEURS WINDOWS
Komodo Edit

Configuration par défaut
Edit › Current file settings › Onglets “Properties” › Encoding (UTF-8). Décochez “Use signature (BOM)”

UltraEdit

Configuration par défaut
Advanced › Configuration › File Handling › Save. Décochez “Write UTF-8 BOM header to all UTF-8 files when saved” et “Write UTF-8 BOM on new files created within this program (if above is not set)”

  • ÉDITEURS OS X
Panic coda

Configuration par défaut
Coda › Preferences › Editor › Default File Encoding › Unicode (UTF-8)

Définition par fichier
Text › Encoding › Unicode (UTF-8)

TextEdit

Configuration par défaut
TextEdit › Préférences › Ouverture et enregistrement › Encodage › Unicode (UTF-8)

  • UBUNTU
Bluefish

Définition par fichier
Document › encodage des caractères › UTF-8

  • MULTI OS
Aptana Studio 3

Configuration par défaut
Aptana Studio 3 › Preferences › General › Workspace › Text file encoding › Other › UTF-8

Données externes

Il peut arriver que vous récupériez vos données depuis d’autres services et/ou de vos utilisateurs (formulaires). Il vous faudra vous assurer qu’elles soient bien en UTF-8.

function toUtf8($string) {     
 if ('UTF-8' != $encoding = mb_detect_encoding($string, mb_detect_order(), true)) {         
 $string = mb_convert_encoding($string, 'UTF-8', $encoding);     }     
 return $string; }

Cette fonction vérifie qu’une chaine de caractères est bien encodée en UTF-8 et, si tel n’est pas le cas, la convertie. Elle retournera donc toujours une chaîne encodée en UTF-8.

Pour les formulaires html il existe l’attribut “accept-charset”, cependant, comme tout ce qui provient du client est modifiable, je vous déconseille son utilisation. Préférez plutôt le passage des valeurs saisies à la fonction ci-dessus, cela demandera plus de ressource server mais vous serez sûr que les données reçues soient bien en UTF-8.

L’affichage de vos données

Maintenant que vos données sont stockées dans le bon format il vous faut les afficher correctement. Pour se faire il va falloir spécifier le charset utilisé.

Trois méthodes vont vous êtres expliquées. Voici l’ordre de priorité d’application du charset de celles-ci, de la plus prioritaire à la moins prioritaire :

  1. PHP
  2. Apache
  3. HTML

Apache

Si vous faites le choix d’utilisez exclusivement UTF-8, privilégiez autant que possible de définir le charset au niveau d’apache. Cela vous assurera un charset défini pour tous vos scripts.

Dans votre fichier httpd.conf ou dans un fichier .htaccess ajoutez/modifier l’instruction suivante :

AddDefaultCharset UTF-8

PHP

Si vous ne pouvez pas modifier la configuration d’apache d’une façon ou d’une autre vous pouvez spécifier l’encodage de cette façon :

header('Content-type: text/html; charset=UTF-8');

Notez qu’ici l’on spécifie un type text/html mais vous pouvez le modifier si vous désirer envoyer tout autre type de contenu.

HTML

Vous pouvez enfin utiliser une balise meta :

<meta http-equiv="Content-type" content="text/html; charset=UTF-8"/>

Attention, en html5 la syntaxe change :

<meta charset="utf-8" />

m-converter devient KingConv.com

Absent depuis quelques semaine, mon temps était consacré à une grosse modification effectuée sur le site m-converter.

En effet, après quelques jours de réflexion et un vote soumis à quelques personnes de nos entourages, le site a changé :

C’est un changement de stratégie radical même si l’architecture du site n’est pas modifié. On espère toucher les utilisateurs différemment.

Pour l’instant, forcément, l’audience baisse un peu. Il faut un peu de temps pour que Mr G. vérifie quelques petits trucs. Mais je vous promets de revenir dans quelques semaine pour vous donner les tendances.