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

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par fredm, 23 Novembre 2010.

Tags:
  1. fredm
    fredm WRInaute occasionnel
    Inscrit:
    2 Novembre 2004
    Messages:
    483
    J'aime reçus:
    0
    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.
     
  2. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    707
    J'aime reçus:
    0
    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 ;)
     
  3. fredm
    fredm WRInaute occasionnel
    Inscrit:
    2 Novembre 2004
    Messages:
    483
    J'aime reçus:
    0
    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:
    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
     
  4. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 810
    J'aime reçus:
    242
    Comme première requête SQL après la connexion à la BDD.
     
  5. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    707
    J'aime reçus:
    0
    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.
     
  6. fredm
    fredm WRInaute occasionnel
    Inscrit:
    2 Novembre 2004
    Messages:
    483
    J'aime reçus:
    0
    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.
     
  7. fredm
    fredm WRInaute occasionnel
    Inscrit:
    2 Novembre 2004
    Messages:
    483
    J'aime reçus:
    0
    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:
     
  8. ap34df
    ap34df WRInaute occasionnel
    Inscrit:
    7 Septembre 2010
    Messages:
    414
    J'aime reçus:
    0
    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.
     
  9. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    707
    J'aime reçus:
    0
    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 :/).
     
  10. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 810
    J'aime reçus:
    242
    Pour convertir une base de latin1 vers UTF8, j'utilise:
    Code:
    ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;
    
     
  11. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    707
    J'aime reçus:
    0
    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 ?
     
  12. fredm
    fredm WRInaute occasionnel
    Inscrit:
    2 Novembre 2004
    Messages:
    483
    J'aime reçus:
    0
    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
     
  13. fredm
    fredm WRInaute occasionnel
    Inscrit:
    2 Novembre 2004
    Messages:
    483
    J'aime reçus:
    0
    Quand je fais la commande suivante:
    Code:
    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:
    é
    à
    Code:
    é
    C'est le merdier.
     
  14. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 874
    J'aime reçus:
    72
    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.
     
  15. fredm
    fredm WRInaute occasionnel
    Inscrit:
    2 Novembre 2004
    Messages:
    483
    J'aime reçus:
    0
    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.
     
  16. Julia41
    Julia41 WRInaute passionné
    Inscrit:
    31 Août 2007
    Messages:
    1 779
    J'aime reçus:
    0
    Bon, pour trouver où est le bug, tente de jouer à coup de utf8_decode/encode, (n'hésites pas à en mettre 2 d'affilés).

    Après je vais peut-être dire des conneries, mais ton PHPMyAdmin doit être sur du PHP5 et ton site est sous PHP/4.3.11.
    D'après le peu que je me rappelle du PHP4, c'était une vraie merde pour tout ce qui était "alphabet non standard" (chinois/russe donc).

    Sinon, ta page s'affiche parfaitement mis à part les 5 premiers caractères de la balise title qui sont remplacés par ?????

    Sinon, pour ta DB, je te conseille de trouver la bonne formule, et de convertir en PHP
    tu fais un SELECT de tout ce qui n'est pas en "utf8 correct", tu le utf8_encode, puis tu update avec la sortie PHP.

    Bon, voilà pour des pistes en vrac, j'ai eu le même soucis en migrant de wordpress à un site custom.
    Pour ta base, tu as 2 jeux de charset, celui de la table, et celui de la base (tu as ça dans l'onglet Opération de PHPMyAdmin)
     
  17. fredm
    fredm WRInaute occasionnel
    Inscrit:
    2 Novembre 2004
    Messages:
    483
    J'aime reçus:
    0
    @Julia41:
    Les caractères que tu vois bien sont ceux écrits en dur dans le fichier PHP.
    Les ???? sont ceux récupérés dans la base.

    Pour résumer :
    Si j'ajoute la ligne SET names 'utf8' alors l'inverse se passe:
    Les ???? de la base sont bien affichés par en caractères russes.
    Les caractères russes en dur dans le fichier PHP sont affichés par des "Вилла"
    Dans ce cas, le navigateur affiche bien tous les caractères tels que je les vois avec PHPMyAdmin, ce qui prouve que le problème est bien dans la base !

    A résoudre:
    Je viens de mettre des bouts du fichier de la base à télécharger.
    Comment faut-il convertir ce fichier pour bien voir les caractères ?
    Ce doit être possible vu que le navigateur le fait bien...
    Le problème sera résolu quand tous les caractères seront bien visibles dans le fichier.
     
  18. fredm
    fredm WRInaute occasionnel
    Inscrit:
    2 Novembre 2004
    Messages:
    483
    J'aime reçus:
    0
    Bon, le problème est résolu.
    Uniquement la partie Russe est perdue précédemment entrée est perdue. C'est pas grave j'ai les sources.
    En fait la base contenait du mélange d'iso et d'utf, à cause d'une ancienne conversion. Même dans le Russe il y avait du mélange, le vrai bordel !

    Donc les conversions du type iconv -f iso-8859-1 -t utf8 source.sql > dest.sql soit n'étaient pas valides ou ne faisaient qu'empirer, l'ouverture et l'écriture en iso ou utf avec l'éditeur de texte m'indiquait une opération non valide ou empirait. Même Word ne savait pas quoi en faire du fichier !

    J'ai donc fini par le faire à la main 8) ça a pris une demi heure et basta.
    Avec l'éditeur de texte, remplacement de chaines de caractères spéciaux par ceux avec accents.
    J'ai pu donc activer la ligne SET names 'utf8';
    Maintenant je vois bien les accents dans PHPMyAdmin et pareil dans le site.
     
  19. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    707
    J'aime reçus:
    0
    Le mélange de jeu de caractères est le pire problème qu'on puisse rencontrer.
    Tu as tout de même réussi à résoudre le problème, c'est le principal.

    Dans un de mes précédents postes, j'indiquais l'écriture d'un article en cours de finalisation sur l'utilisation d'un jeu de caractères dans un projet.
    Vous pourrez donc trouver l'article intitulé : PHP / MySQL : comment résoudre les problèmes d’accents ?.

    Il pourra intéresser d'autre personnes rencontrant des problèmes.
    Par contre, j'explique simplement comment mettre l'environnement dans un même jeu de caractères, il n'est pas question de conversion. Peut-être dans un prochain article.
    N'hésitez pas à me faire des retours (par mp, mail, ou commentaire).
     
Chargement...
Similar Threads - Problème affichage base Forum Date
Problème affichage des derniers articles wordpress page accueil Administration d'un site Web Hier à 22:36
Problème d'affichage meta titre Débuter en référencement 3 Juin 2019
[Wordpress]Problème affichage article dans sous-catégorie Développement d'un site Web ou d'une appli mobile 11 Juin 2017
Problème d'affichage des commentaires sur Wordpress Développement d'un site Web ou d'une appli mobile 2 Mars 2017
Problème d'affichage de la carte sur Google : Google maps / Google mon entreprise Référencement Google 7 Mai 2016
[Problème] Affichage des 10 derniers sujets de mon forum Développement d'un site Web ou d'une appli mobile 31 Mars 2016
Probleme Affichage Title = Ajout Non Voulu De Google Référencement Google 10 Juin 2015
Problème d'affichage de contenu Développement d'un site Web ou d'une appli mobile 19 Janvier 2015
Problème affichage image Développement d'un site Web ou d'une appli mobile 20 Décembre 2014
Problème d'affichage www.monsite.com/index.php introuvable URL Rewriting et .htaccess 17 Décembre 2014
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice