Encodage UTF8 / latin1

Depuis le 7 mai 2010, les serveurs de FranceServ Hébergement sont passés sous l'encodage UTF8 par défaut.

Avantage

L'UTF8 permet d'écrire un plus grand nombre de caractères différents sans se limiter à notre langue latine. Les caractères asiatiques, japonais et autres sont maintenant supportés par défaut.

Il était possible, avant cette date, de déclarer vos pages web ainsi que vos bases de données MySQL en UTF8. Maintenant, c'est par défaut.

Problème d'accents ?

Si votre site affiche des accents bizarroïdes, c'est souvent dû à la connexion au serveur MySQL.

Un serveur sous Linux peut gérer n'importe quel encodage mais si on ne lui dit rien, il vas choisir un encodage par défaut et chez FranceServ Hébergement c'est l'UTF8.

Windows comprend par défaut uniquement l'encodage Windows-1252 qui est une extension de l'ISO/CEI 8859-1, également connu sous le nom de Latin1 et comme la plupart des hébergeurs historiques sont encore en Latin1 le problème se rencontre moins souvent chez eux.

J'ai choisie d'utiliser l'UTF8 et non pas le Latin1 car l'UTF8 gère toutes les langues et pas seulement les langues latine.

Raison historique

Au niveau historique, après la seconde guerre mondiale et au moment de l’émergence d'Internet, les européens et surtout les américains n'ont pas jugés nécessaire de prendre en compte les langues asiatiques, surtout après Nagasaki et Hiroshima et c'est ainsi qu'un fossé a été crée.

Beaucoup d'hébergeurs sont encore en Latin1 pour justement ne pas s’embêter avec les développements ne se souciant pas de l'encodage. Mais de plus en plus de sites sont maintenant en UTF8, ceci pour gérer beaucoup plus facilement ces caractères non présents sur nos claviers européens. Il faut savoir également que PHP 5.6 sera par défaut en UTF8.

Le problème est pratiquement le même avec l'IPv4 où l'Asie a été fortement mise de coté mais avec l'arrivé de l'IPV6, ce fossé tend à disparaitre.

Les applications en UTF8 sont rares mais deviennent de plus en plus nombreuses car l'UTF8 offre plus de possibilités de type d'écriture. Les développeurs à la page ont compris et savent qu'il faut spécifier comment se fait la connexion pour ne pas être tributaire des options par défaut du serveur MySQL ou même du serveur Web.

Les anciennes applications ainsi que les développeurs en herbes ne se préoccupent pas de ce problème et disent “on a toujours fait comme ça et ça a toujours marché”. Et bien non… Internet a été créé sans les accents pour les anglais/américains, sans tenir compte des langues asiatiques et arabiques.

Une variante Latin15 à été crée pour les européens (et supporte quelques autres caractères comme le eszett allemand “ß” ainsi que le signe euro “€” entres autres. Le Latin15 était une étape, l'UTF8 est sa finalité.

Comment résoudre le problème

En conclusion, si votre base de donnée est en Latin1, il faut le dire juste après la connexion en ajoutant seulement une ligne.

Exemple avec l'ancien connecteur MySQL :

<?php
mysql_connect('sql.franceserv.fr','login','password');
mysql_query("SET NAMES 'latin1'"); //La connexion doit se faire en latin1 et non en utf8
?>

Ou avec le connecteur MySQL PDO recommandé :

$sth = $pdo->query("SET NAMES 'latin1'");

Vous pouvez également migrer vos bases de données MySQL en encodage utf8 via PhpMyAdmin mais sachez que c'est très risqué si vous ne faites aucune sauvegarde avant. Dans ce cas, il ne vous sera pas nécessaire de préciser que vous vous connectez à une base de données en encodage UTF8. Cependant, il est toujours mieux de le préciser pour ne pas être tributaire de la configuration par défaut de notre plateforme d'hébergement :

<?php
mysql_connect('sql.franceserv.fr','login','password');
mysql_query("SET NAMES 'utf8'");
?>

Ou avec le connecteur MySQL PDO recommandé :

$sth = $pdo->query("SET NAMES 'utf8'");

A ne pas oublier

Notre serveur WEB Apache fonctionne également intégralement en UTF8. Comme toujours, il est mieux de préciser le bon encodage de vos pages et de l'adapter à celui de votre base de données ET à votre éditeur de texte.

Pour un encodage UTF8 :

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

Pour un encodage en Latin1 :

<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
 
encodage.txt · Dernière modification: 2017/10/26 20:25 par elodie
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki