SpeedAirMan Posté 19 Octobre 2007 Posté 19 Octobre 2007 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 ?
FrenchFred Posté 19 Octobre 2007 Posté 19 Octobre 2007 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)
theprogrammeur Posté 19 Octobre 2007 Posté 19 Octobre 2007 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.
SpeedAirMan Posté 23 Octobre 2007 Auteur Posté 23 Octobre 2007 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 : ...ce n'est pas le cas de mes tables, qui sont, quand à elles, en latin1_german_ci, comme en atteste cette capture : 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 ?
Las Posté 23 Octobre 2007 Posté 23 Octobre 2007 (modifié) chez moi pour un site en russe et en anglais, avec utf8_unicode_ci ça marche très bien. Modifié 23 Octobre 2007 par Las
Cariboo Posté 24 Octobre 2007 Posté 24 Octobre 2007 Juste au cas où : quelle est la version de Mysql que tu utilises ?
SpeedAirMan Posté 24 Octobre 2007 Auteur Posté 24 Octobre 2007 Juste au cas où : quelle est la version de Mysql que tu utilises ? MySQL version 5.0.22 Pourquoi ? Comment règler mon problème et convertir l'interclassement (encodage/charset) en UTF-8 ? Quelle est la commande correcte ?
Callisto Posté 24 Octobre 2007 Posté 24 Octobre 2007 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;
SpeedAirMan Posté 25 Octobre 2007 Auteur Posté 25 Octobre 2007 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. 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.
Callisto Posté 25 Octobre 2007 Posté 25 Octobre 2007 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.
SpeedAirMan Posté 25 Octobre 2007 Auteur Posté 25 Octobre 2007 Super, merci beaucoup ! ça marche et en plus j'ai compris :-) à priori, je ne devrais donc plus avoir de problèmes avec des caractères spéciaux venus d'autres languages : cool ! :-)
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant