[Résolu] Encodage UTF-8 dans MySQL/PHP/Apache2

Hello,

Je me casse les dents (et les nerfs) sur le pb suivant :

Toutes les chaînes de caractères venant de mes bases de données apparaissent dans mon serveur web avec des symboles � à la place des caractères accentués.
Dans phpmyadmin, les accents sont en place.
Dans mysql (en ligne de commande), j’ai des �
Les répertoires indexés sur le serveur affichent aussi des � dans leurs noms (ils disparaissent qd je demande manuellement utf-8 mais à chaque page l’utf-8 est perdu…)

Pour la config :

J’ai opté pour l’encodage utf-8 (celui par défaut sur le système)

J’ai réglé les locales par défaut sur utf-8 (dpkg-reconfigure locales)

Dans /etc/apache2/conf.d/charset je n’ai rien indiqué pour permettre aux pages de préciser leur encodage mais imposer utf-8 ne change rien.

Dans /etc/php5/apache2, j’ai :

Dans /etc/mysql/my.cnf :

[mysqld]
default-character-set=utf8
[mysql]
default-character-set=utf8
[client]
default-character-set=utf8

character-set-results = 'utf8'
character-set-server = 'utf8'
character-set-database = 'utf8'
collation-connection = 'utf8_unicode_ci'
collation-server = 'utf8_unicode_ci'

Variables et réglages du serveur

Merci à vous :wink:

Je sais pas si ça t’aidera, j’ai lu en diag…
blog.neovov.com/index.php?2007/0 … e-en-utf-8

Je te remercie, ton lien m’a permis d’avancer un peu. J’ai pu convertir mes tables latin1 vers utf8. Pour le reste c’est un vrai sac de noeud :unamused: Si je m’en sors, je rendrai compte ! Pas si évident l’utf8 tout de même…

A régler :

-les répertoires sur le serveur sont affichés en iso (je pense que c’est le système qui envoie un en-tête french)
-phpmyadmin m’affiche mes données en iso (le navigateur et les données sont bien en utf8)

Bluenote, en ce qui me concerne, j’ai du faire sous MySQL4 un mysqldump de mes bases de données puis, après mise à jour, une restauration des dites bases. Cela a permis de faire la conversion des noms sans pbms. Par contre, je conserve fr_FR@euro comme locales à cause d’autres programmes (lyx par exemple). Il a fallu aussi que je patche mes fichiers Openoffice (base) lié à mes bases MySQL car les noms des champs n’étaient pas convertis. Si tu en as besoin, je peux te dire comment faire. Du coup maintenant, les noms des mes champs ne contiennent que des caractères classiques non accentués…

Merci, en fait, la conversion s’est bien passée, c’est seulement dans phpmyadmin que les données affichées ont l’air d’être en iso. Pour convertir j’ai suivi les indications du blog ci-dessus, c’est à dire :

[quote]Créer une base en utf8

Exporter ses tables latin1 : latin1.sql

%sed -i ‘s/CHARSET=latin1/CHARACTER SET utf8 COLLATE utf8_bin/’ latin1.sql

%iconv -f ISO8859-1 -t UTF-8 -o utf8.sql latin1.sql

Importer utf8.sql dans la base en utf8
[/quote]

Pour info, voilà ce que j’ai dans phpmyadmin :

http://marsan.loc.free.fr/Online/Photos/phpmyadmin_encodage.jpg

Je ne sais pas si tu as vu, mais le gars du blog s’est inspiré de ça:
electron-libre.fassnet.net/utf8.php
Ce ne serait plutôt que les données sont en utf-8 mais que le “navigateur” les affiche en iso?

[quote=“Bluenote”]Pour info, voilà ce que j’ai dans phpmyadmin :

http://marsan.loc.free.fr/Online/Photos/phpmyadmin_encodage.jpg[/quote]

En clair, tes données sont codées en UTF-8 mais la page est affichée en ISO. phpmyadmin doit être en ISO ce qui cause cette pagaille. La bonne nouvelle, c’est que si tu voulais ta base en UTF8, c’est bon. Il suffit maintenant que dans tes pages PHP, tu n’oublies pas le préambule

Oui comme je disais tout est bon (pages, mysql, php). Il n’y a que l’affichage dans phpmyadmin qui ne suit pas. J’ai essayé une directive ‘default-charset’ dans /etc/phpmyadmin/config.inc.php mais c’est sans effet. Je tâtonnes :wink:

J’ai tjs eu du mal à configurer phpmyadmin. Je ne sais même pas vraiment où est le fichier de conf (/etc/ ? /usr/share ?). Tout ce que j’y mets est sans effet (par ex. allonger la durée de vie du cookie de session, je n’y arrive plus)

bonsoir,
à mon avis, il s’agit de ce fichier:

$ ls -al /etc/apache2/conf.d/phpmyadmin.conf lrwxrwxrwx 1 root root 27 2007-06-17 10:16 /etc/apache2/conf.d/phpmyadmin.conf -> /etc/phpmyadmin/apache.conf

Ils y a un certains nombres de manipulations pour TOUT passer en UTF-8, sur ton site, ton système, etc …
Tant que tout n’est pas en phase avec l’utf-8, y’a toujours un truc qui merde.
Quand on disposera de php6, ce souci ne sera plus.

ps: je sais que je t’aide pas beaucoup, mais j’ai déjà du donner le lien vers un tuto pour passer tout en utf-8, je vais tâcher de le retrouver, mais pas ce soir …

Merci :wink: Finalement, en mysql ça déconne aussi. Il n’y a que dans les pages que c’est bon (mbstring fait son travail). Bon, je vais essayer de trouver et je mettrai la solution ici. C’était juste un essai de utf8, ce n’est pas mon serveur web donc rien de méchant.

Correction : mes tables sont bien en utf-8 mais dans phpmyadmin et dans le shell, elles sont affichées en iso. Tout est correct à travers php (lecture/écriture).

Méthode artisanale : remplacer les caractères de façon semi-automatique (avec un éditeur de texte) dans les exports de tables -> affichage correct dans phpmyadmin.

Sinon, c’était écrit en rouge dans la page d’accueil de phpmyadmin :

[quote=“Bluenote”]Méthode artisanale : remplacer les caractères de façon semi-automatique (avec un éditeur de texte) dans les exports de tables -> affichage correct dans phpmyadmin.
[/quote]
Quels caractères? Les accentués et tout ça?

éè^àçïù en 5 min. Et pour les caractères dans les noms étrangers, à l’occasion… :wink: