Problème d'affichage de base encodée en utf-8


fredm
WRInaute impliqué
WRInaute impliqué
 
Messages: 549
Inscription: 2 Nov 2004

Problème d'affichage de base encodée en utf-8

Message le Mar Nov 23, 2010 15:27

Bonjour,

Je suis entrain de créer la version Russe d'un site et j'ai un problème d'affichage de caractères.
J'ai modifié toute la base de donnée en utf-8, les tables, les champs, tout.
Mes pages php sont encodées en utf-8.

Le problème est lorsque j'entre directement du texte Russe Cyrillic (exemple "Квартира") via PHPMyAdmin, PHPMyAdmin m'affiche bien ce texte en retour mais sur mon site je vois des ???? à la place.
Et inversement, si via l'interface backoffice de mon site, j'entre du texte en Russe alors PHPMyAdmin affiche par exemple des "é" à la place des "é" mais sur mon site alors je vois bien le texte.

Exemple sur cette page, voyez sur la petite fiche blanche les ???? il correspond à du texte que j'ai entré à la main dans PHPMyAdmin, tout le reste s'affiche bien car entré via les pages du backoffice.

Voyez)vous où est le problème ?

Merci d'avance.


Blount
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 430
Inscription: 18 Nov 2010

Re: Problème d'affichage de base encodée en utf-8

Message le Mar Nov 23, 2010 16:13

Lorsque tu te connectes au serveur SQL, il faut lui préciser que les données que tu vas insérer sont en UTF-8.
La requête suivante permet de le faire (pour MySQL):
SET names 'utf8';
Cette requête est à faire avant toute autre.

Pour PHPMyAdmin, tu dois pouvoir, si ce n'est déjà fait, configurer la connexion à l'aide d'un menu quelque part.

J'ai réalisé un article sur mon blog pour configurer un projet entier dans un jeu de caractères. Mais il est en cours de finalisation, donc inutile que je donne de lien ;)


fredm
WRInaute impliqué
WRInaute impliqué
 
Messages: 549
Inscription: 2 Nov 2004

Re: Problème d'affichage de base encodée en utf-8

Message le Mar Nov 23, 2010 17:00

Merci mais je ne vois pas où insérer ce paramètre SET names 'utf8';

Sinon voici les paramèrtres de mon serveur SQL (un mélange de tout...) :? , c'est un mutualisé chez Sivit donc je ne peux pas changer les valeurs:

Code: Tout sélectionner
Variable               Valeur pour la session / Valeur globale
auto increment increment         1
auto increment offset            1
automatic sp privileges         ON
back log                  50
basedir                  /usr/
binlog cache size            32 768
bulk insert buffer size         8 388 608
character set client            utf8
(Valeur globale)               latin1
character set connection         utf8
(Valeur globale)               latin1
character set database         latin1
character set filesystem         binary
character set results            utf8
(Valeur globale)               latin1
character set server            latin1
character set system            utf8
character sets dir            /usr/share/mysql/charsets/
collation connection            utf8_unicode_ci
(Valeur globale)               latin1_swedish_ci
collation database            latin1_swedish_ci
collation server               latin1_swedish_ci


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: Problème d'affichage de base encodée en utf-8

Message le Mar Nov 23, 2010 17:05

Merci mais je ne vois pas où insérer ce paramètre SET names 'utf8';

Comme première requête SQL après la connexion à la BDD.


Blount
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 430
Inscription: 18 Nov 2010

Re: Problème d'affichage de base encodée en utf-8

Message le Mar Nov 23, 2010 17:06

Comment as-tu eu ce retour ?

Sinon, la requêtes "SET names 'utf8';" est à faire dans ton code PHP.
En gros, à l'ancienne :
mysql_query("SET names 'utf8';");

À adapter selon ton code (framework, PDO, etc.).

Sinon, dans ton retour, tu sembles bien en UTF-8 sur ta connexion dans phpMyAdmin.


fredm
WRInaute impliqué
WRInaute impliqué
 
Messages: 549
Inscription: 2 Nov 2004

Re: Problème d'affichage de base encodée en utf-8

Message le Mar Nov 23, 2010 17:53

Ok j'ai ajouté cette ligne après le mysqlconnect et ça marche .... mais ça déconne pour les caractères qui s'affichaient bien avant.
Les pages affichent maintenant de la même manière que via PHPMyAdmin, c'est mieux dirait-on mais je fais quoi maintenant ?
je me retape tout dans la base pour changer les textes proprement ?

Concrètement, tout ce qui a été entré en russe (à l'époque où la base était en latin1), il n'apparait plus que des "Какая роскÐ", voir la page.


fredm
WRInaute impliqué
WRInaute impliqué
 
Messages: 549
Inscription: 2 Nov 2004

Re: Problème d'affichage de base encodée en utf-8

Message le Mar Nov 23, 2010 18:06

C'est le bordel maintenant puisque avec cette nouvelle ligne, mes pages en français affichent des "é" à la place des "é" ... etc
Je vais devoir la supprimer pour l'instant.
Mais comment puis convertir cette base ?
Pour comprendre la situation, actuellement via PHPMyAdmin je vois en français les accents comme des é, puis certaines entrées en Russe je vois parfois des "Вилла" et parfois des "Это", c'est la panique :mrgreen:

ap34df
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 441
Inscription: 7 Sep 2010

Re: Problème d'affichage de base encodée en utf-8

Message le Mar Nov 23, 2010 19:08

Si tes tables sont en utf8 et que tu les a bien rempli via des requetes e utf8, lors de leur affichage, il faut les appeler en utf 8 via mysqli_set_charset ($connexion, 'UTF8') juste après la connexion à la bdd et avant l'exécution des requêtes.


Blount
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 430
Inscription: 18 Nov 2010

Re: Problème d'affichage de base encodée en utf-8

Message le Mar Nov 23, 2010 19:13

C'est parce que lorsque tu as changé le jeu de caractères de la base, tu n'as pas converti les chaînes présentes vers le nouveau jeu de caractères.

Regarde sur http://dev.mysql.com/doc/refman/5.0/fr/alter-table.html.

Fait une recherche sur "Depuis MySQL 4.1.2" tu tomberas sur la partie qui doit t'intéresser (vive les ancres :/).


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: Problème d'affichage de base encodée en utf-8

Message le Mar Nov 23, 2010 19:32

Pour convertir une base de latin1 vers UTF8, j'utilise:
Code: Tout sélectionner
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;


Blount
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 430
Inscription: 18 Nov 2010

Re: Problème d'affichage de base encodée en utf-8

Message le Mar Nov 23, 2010 19:57

Penses tout de même à faire des sauvegardes, on ne sait jamais.

@spout : j'ai lu que cette commande convertissait à partir du jeu de caractères par défaut du serveur. Si le jeu par défaut n'est pas le bon, ça risque pas de foirer ?


fredm
WRInaute impliqué
WRInaute impliqué
 
Messages: 549
Inscription: 2 Nov 2004

Re: Problème d'affichage de base encodée en utf-8

Message le Mar Nov 23, 2010 19:58

spout a écrit:Pour convertir une base de latin1 vers UTF8, j'utilise:
Code: Tout sélectionner
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;
Je viens de le faire avec PHPMySQL dans l'onglet SQL pour la table qui pose problème, il me dit que la commande a bien été effectuée mais ça m'affiche toujours des "é".

Je me demande si mon problème n'est pas inversé ... je vais faire cette même commande mais vers ISO pour voir


fredm
WRInaute impliqué
WRInaute impliqué
 
Messages: 549
Inscription: 2 Nov 2004

Re: Problème d'affichage de base encodée en utf-8

Message le Mar Nov 23, 2010 20:20

Quand je fais la commande suivante:
Code: Tout sélectionner
iconv -f iso-8859-1 -t utf8 ma_base.sql > ma_base_utf.sql

J'ai encore plus de caractères spéciaux:
L'équivalent du "é" est passé de
Code: Tout sélectionner
é
à
Code: Tout sélectionner
é

C'est le merdier.


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8578
Inscription: 23 Nov 2005

Re: Problème d'affichage de base encodée en utf-8

Message le Mar Nov 23, 2010 21:06

Mon conseil : ne te base pas sur PhpMyAdmin pour ce qui est de vérifier la qualité d'encodage. Mieux vaut utiliser un frontend mysql comme SQLYog ou Heidisql.


fredm
WRInaute impliqué
WRInaute impliqué
 
Messages: 549
Inscription: 2 Nov 2004

Re: Problème d'affichage de base encodée en utf-8

Message le Mar Nov 23, 2010 21:26

UsagiYojimbo a écrit:Mon conseil : ne te base pas sur PhpMyAdmin pour ce qui est de vérifier la qualité d'encodage. Mieux vaut utiliser un frontend mysql comme SQLYog ou Heidisql.
J'utilise Sequel Pro et ça m'affiche la même chose.
Je regarde également avec un éditeur de texte et je vois la même chose.

Je pense que ce qui s'est passé est que j'avais déjà fais une conversion de la base de iso en utf mais certainement mal faite. Ensuite j'ai changé tous les paramètres de sql de iso en utf.

J'ai l'impression là que mon problème est du genre des caractères du style iso écrits en utf sur le l'utf, un truc comme çà, sinon j'y comprends rien.

Problème d'affichage de base encodée en utf-8

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité