Agence web et solutions IT, Experts Symfony contact@avanim-prod.com

Eviter les problèmes d’encoding en PHP5

19 mai 2011 jravouna Actualités, Symfony Étiquettes : , , , , 0 Comments

Les jeux de caractères peuvent être source de confusion dans le meilleur des temps. Ce message vise à expliquer les problèmes potentiels et proposer des solutions.

Bien que cela soit appliqué à PHP et une lampe typique pile, vous pouvez appliquer les mêmes principes à toute multi-niveaux pile.

Ce qu’il faut retenir est d’utiliser le plus souvent possible le format UTF-8.

D’où viennent les problèmes?

Vous avez un potentiel de problèmes à se produire partout où une partie de vos entretiens système à l’autre. Pour un PHP / LAMP configuration de ces composants sont:

* Votre éditeur que vous créez les fichiers PHP / HTML en
* Le peuple navigateur web qui consultent votre site par le biais
* Votre application web PHP s’exécute sur le serveur web
* La base de données MySQL
* Partout ailleurs externes vous de lecture / écriture de données à partir de (memcached, API, RSS, etc)

Pour éviter ces problèmes potentiels que nous allons faire en sorte que chaque composant est configuré pour utiliser UTF-8 afin qu’aucune erreur de traduction qui se passe partout.

Configuration de votre éditeur

Assurez-vous que votre éditeur de texte, IDE ou ce que vous avez écrit le code PHP en sauvegarde vos fichiers en format UTF-8. Votre client FTP, SCP, SFTP client n’a pas besoin de spéciale mise en UTF-8.

Faire en sorte que les navigateurs web savoir pour utiliser UTF-8

Pour vous assurer que les navigateurs de vos utilisateurs savons tous à lire / écrire toutes les données au format UTF-8, vous pouvez le configurer dans deux endroits.

Le type de contenu <META> tag
Assurer l’en-tête content-type META spécifie UTF-8 comme jeu de caractères comme ceci:


Les en-têtes de réponse HTTP
Make sure that the Content-Type response header also specifies UTF-8 as the character-set like this: Assurez-vous que le Content-Type -tête de réponse précise également UTF-8 comme jeu de caractères comme ceci:

ini_set('default_charset', 'utf-8')

Configuration de la connexion MySQL

Now you know that all of the data you’re receiving from the users is in UTF-8 format we need to configure the client connection between the PHP and the MySQL database. Maintenant, vous savez que toutes les données que vous recevez des utilisateurs est en format UTF-8 nous avons besoin pour configurer la connexion entre le client et PHP la base de données MySQL.

There’s a generic way of doing by simply executing the MySQL query: Il ya un moyen générique de faire simplement en exécutant la requête MySQL:

SET NAMES utf8;

… Et en fonction du client / pilote que vous utilisez il ya des fonctions d’assistance pour ce faire plus facilement à la place:

mysql_set_charset ('utf8', $ link);

With the built in mysql functions Avec la fonction incluse dans mysql

La base de données MySQL

We’re pretty much there now, you just need to make sure that MySQL knows to store the data in your tables as UTF-8. Nous sommes à peu près là maintenant, il vous suffit de vous assurer que MySQL sait pour stocker les données dans vos tables en UTF-8. You can check their encoding by looking at the Collation value in the output of SHOW TABLE STATUS (in phpmyadmin this is shown in the list of tables). Vous pouvez vérifier leur codage en regardant la valeur de classement dans le résultat de SHOW TABLE STATUS (dans phpmyadmin cela est montré dans la liste des tables).

If your tables are not already in UTF-8 (it’s likely they’re in latin1) then you’ll need to convert them by running the following command for each table: Si vos tables ne sont pas déjà en UTF-8 (il est probable qu’ils sont en latin1) alors vous aurez besoin de les convertir en exécutant la commande suivante pour chaque table:

ALTER TABLE myTable CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE myTable CHARACTER SET utf8 COLLATE utf8_general_ci;

One last thing to watch out for Une dernière chose à surveiller

With all of these steps complete now your application should be free of any character set problems. Avec toutes ces étapes complète dès maintenant votre demande doit être exempte de tout problème de jeu de caractères.

There is one thing to watch out for, most of the PHP string functions are not unicode aware so for example if you run strlen() against a multi-byte character it’ll return the number of bytes in the input, not the number of characters. Il ya une chose à surveiller, la plupart des fonctions de chaîne PHP ne sont pas conscients unicode donc par exemple si vous exécutez strlen() contre une multi-byte character il va retourner le nombre d’octets dans l’entrée, pas le nombre de caractères. You can work round this by using the Multibyte String PHP extension though it’s not that common for these byte/character issues to cause problems. Vous pouvez travailler autour de cela en utilisant le multi-octets String extension PHP si ce n’est pas si commun à ces questions octet / caractère de causer des problèmes.

Submit a comment