Aller au contenu

Quel encodage/charset choisir ?


SpeedAirMan

Sujets conseillés

Bonjour,

je m'apprête à (re-)lancer un site multilingue (plusieurs langues parmi lesquelles : Anglais, Français, Allemand, Espagnol et bientot : Portugais, Polonais et peut être d'autres plus tard). Je fais face à la grande question du choix du charset : ISO-8859-1 , ISO-8859-2 , ISO-8859-15 ou UTF-8 ?

Le site se présente sous la forme d'un forum sous IPB (Invision Power Board, le même que celui ci)

Pour l'instant (il est déjà en ligne mais fermé le temps que je le prépare et que je publie plusieurs articles avec l'aide d'autres admin), j'ai choisi UTF-8 en espérant que l'ensemble des caractères spéciaux pourront passer sans problèmes. (il y'en a beaucoup en Polonais, Allemand et Portugais (BR)).

Est-ce le bon choix ?

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Par experience, je travaille presque uniquement en UTF8 pour les sites multilangues.

Dans ton cas, oui l'utf8 est a utilise car il supporte toutes les langues.

Toutefois, fait attention a certains traitements sur les chaines. Il y a des fonctions specifiques mb_... (Voir php.net pour plus d'information)

Lien vers le commentaire
Partager sur d’autres sites

Avant, je ne travaillais qu'avec l'ISO-8859-1 sans m'inquièter des autres jeux de caractères. Mais depuis que je suis passé à Linux, j'ai modifié tout mon site en UTF-8. Ca a été la galère au début pour rendre tout compatible mais maintenant tout va bien.

Je ne peux que conseille d'utiliser l'UTF-8 car MySQL travaille déjà en UTF-8 et la prochaine version de PHP utilisera l'UTF-8 et non plus l'ISO-8859-1.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

j'ai maintenant un soucis avec MySQL / PhpMyAdmin pour changer l'interclassement.

j'ai contacté mon service client (Infomaniak, très bons hébergeurs au passage ;-)). Extrait :

Bonjour,

j'ai plusieurs hébergements chez vous, dont un qui est international, c'est à dire qu'il y a des discussions dans le forum en plusieurs languages parmi lesquels Anglais, Français, Allemand, Polonais, Portugais etc.

Afin d'assurer la compatibilité avec les différents caractères spéciaux (accents et autres), j'ai choisi d'utiliser l'encodage/charset UTF-8 dans mon forum IPB (Invision Power Board) actuellement en construction.

Cependant on m'a dit que cela pourrait causer des problèmes avec PHP, Apache et MySQL s'ils ne sont pas configurés correctement.

J'aimerai savoir ce qu'il en est : aurai-je à faire à des problèmes ? Les

caractères spéciaux seront-ils bien acceptés et affichés ?

Ce à quoi ils m'ont répondu

Il faut que vous regardiez quel interclassement est choisi dans votre interface phpmyadmin (via la console d'admin), si c'est bien utf8 il n'y aura aucun problème.

Mais j'ai un souci. En effet, si la connexion à MySQL utilise bien l'interclassement UTF-8 comme le montre cette capture :

infomaniak-jeu-caracteres-mysql-UTF-8-unicode-idem-interclassement-connexion-mysql.jpg

...ce n'est pas le cas de mes tables, qui sont, quand à elles, en latin1_german_ci, comme en atteste cette capture :

infomaniak-base-donnees-mysql-interclassement-latin_1_german1_ci.jpg

Quand je leur en ai parlé, ils m'ont dit qu'il est possible de changer l'interclassement des tables en utilisant cette commande :

ALTER TABLE tbl_name DEFAULT CHARACTER SET charset_name;

(CF : http://dev.mysql.com/doc/refman/5.0/fr/alter-database.html et http://dev.mysql.com/doc/refman/5.0/fr/alter-table.html )

J'ai donc tenté la commande suivante :

ALTER TABLE prefixipb_posts DEFAULT CHARACTER SET utf8_general_ci;
et
ALTER TABLE prefixipb_posts DEFAULT CHARACTER SET utf8_unicode_ci;

Mais dans les deux cas, j'obtiens un message d'erreur sous PhpMyAdmin :

#1115 - Unknown character set: 'utf8_general_ci'

Quelqu'un peut m'aider svp ? :(

Lien vers le commentaire
Partager sur d’autres sites

J'ai donc tenté la commande suivante :

ALTER TABLE prefixipb_posts DEFAULT CHARACTER SET utf8_general_ci;

et

ALTER TABLE prefixipb_posts DEFAULT CHARACTER SET utf8_unicode_ci;

Mais dans les deux cas, j'obtiens un message d'erreur sous PhpMyAdmin :

#1115 - Unknown character set: 'utf8_general_ci'

Il me semble que "utf8_general_ci" est un interclassement qui appartient au charset "utf8". Le message d'erreur te dit en effet que "utf8_general_ci" n'est pas connu en tant que charset. Essaye donc avec "utf8" tout court :

ALTER TABLE prefixipb_posts DEFAULT CHARACTER SET utf8;

Lien vers le commentaire
Partager sur d’autres sites

Il me semble que "utf8_general_ci" est un interclassement qui appartient au charset "utf8". Le message d'erreur te dit en effet que "utf8_general_ci" n'est pas connu en tant que charset. Essaye donc avec "utf8" tout court :

ALTER TABLE prefixipb_posts DEFAULT CHARACTER SET utf8;

Merci, ça a fonctionné correctement, néanmoins il me reste un doute. En effet, si les tables ont bien été converties en UTF8, PhpMyAdmin m'indique que la somme des tables est toujours en latin1.

somme_93-tables_latin1_german_ci_au_lieu_de_utf8.jpg

Je ne comprends pas.

Je précise que j'ai converti toutes les tables d'IPB et qu'il n'y en n'a pas d'autres dans cette base.

Lien vers le commentaire
Partager sur d’autres sites

La ligne "Somme" indique peut-être l'interclassement de la base elle-même. En effet, charsets et interclassements peuvent s'appliquer à quatre niveaux : serveur, base, table et colonne.

La requête "alter table" n'affecte que la table. Pour agir sur la base et modifier le charset et l'interclassement en une seule fois, la requête serait plutôt :

ALTER DATABASE nom_de_la_base DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

De toute façon, PhpMyAdmin te propose, dans ses dernières versions en tout cas, de modifier aussi bien le charset que l'interclassement à tous les 4 niveaux, par le biais de l'interface. Donc il n'est pas strictement necessaire de connaître la syntaxe de ces requêtes, mais c'est toujours bien pour comprendre ce qui se passe.

Ici tu auras la doc de MySQL concernant les charsets et les interclassements : Specifying Character Sets and Collations.

Personnellement, lorsque je code un site PHP/MySQL entièrement en UTF8, j'envoie toujours, au début du script, la requête "SET NAMES utf8" car elle renseigne des variables du serveur concernant la connexion en cours et indique que l'UTF8 est utilisé comme encodage par défaut pour toutes les requêtes.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...