IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Php/MySQL et caractères cyrilliques [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 29
    Par défaut Php/MySQL et caractères cyrilliques
    Bonjour à tous,

    je développe actuellement une petite application en Php/MySQL dans une ex-république soviétique... et se pose donc la question de la gestion des caractères cyrilliques.

    Dans une table, certains champs sont donc en cyrillique, mais quand je les affiche via une requête SQL, je n'ai que des ???????? qui apparaissent.

    Je précise que j'ai également des caractères cyrilliques dans des labels codés en dur dans mon code php, mais ceux-ci apparaissent sans problème.

    D'où la question: que dois-je vérifier / changer pour que les caractères cyrilliques stockés dans la base apparaissent correctement?

    Quelques détails techniques:
    - Je développe en local avec EasyPhp 3.0 (Apache 2.2.11, PHP 5.2.8, PhpMyAdmin 3.1.1, MySQL 5.1.30)
    - Dans l'interface de PhpMyAdmin, les caractères apparaissent correctement
    - Toutes mes tables sont de type InnoDB et le collation est utf8_general_ci

    Une dernière précision, l'alphabet que j'utilise est en réalité un cyrillique légèrement modifié (tadjik), ce qui change peut-être la donne?

    Sûrement une question basique, mais je suis loin d'être un expert!

    Merci d'avance,

    Stéphane

  2. #2
    mon_nom_est_personne
    Invité(e)
    Par défaut
    Bienvenue dans le monde merveuilleux des encodage non ascii (et encore t'as de la chance car tu travaille sur du mono-octal).
    le secret est dans les SET NAMES
    En gros apres l'initialisation de ta requete tu dois specifier que ta bdd va recevoir du tadjik et que ce qui va en sortir est du tadjik. Toutfois une chose est interessante, depuis mysql 5 meme si ta page est encodee en utf8 tu doit ecrire SET NAMES UTF-8.
    donc la solution pour toi c'est D'executer la requete "SET NAMES nom_de_lencodage_de_ta_page"

  3. #3
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut


    Pour les problème d'encoding, pour ne pas avoir de problèmes (enfin, le moins possibles ) c'est que toutes ta chaines suive un seul et meme encodage.

    Tes données en bases sont en utf8. Ok
    Tes scripts php sont-ils utf-8 ?
    Est-ce que le flux de données qu'apache envoie au navigateur est utf-8 ? (Firebug > reseau > response header > Content-Type)
    Est-ce que ton flux xml contient un tag meta précisant l'encoding utf-8 ?

  4. #4
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 29
    Par défaut
    Merci tous les 2 pour votre réponse... mais j'avoue que je nage un peu!

    >> mon_nom_est_personne

    à quel moment dois-je exécuter cette requête? Est-ce que je dois l'inclure dans chaque SELECT, UPDATE et INSERT?

    genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT colonne FROM table WHERE colonne = 1 SET NAMES UTF-8
    ?

    >> Mr. N

    Base en utf-8 Ok
    Fichiers php en utf-8 Ok
    Content-type en text/html --> C'est peut-être de là que vient le problème?

    Est-ce que ton flux xml contient un tag meta précisant l'encoding utf-8
    heu... là je nage carrément

  5. #5
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Citation Envoyé par stöckli Voir le message
    >> mon_nom_est_personne

    à quel moment dois-je exécuter cette requête? Est-ce que je dois l'inclure dans chaque SELECT, UPDATE et INSERT?

    genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT colonne FROM table WHERE colonne = 1 SET NAMES UTF-8
    ?
    C'est une requete à part entière. Tu l'executes une fois pour toute juste après t'être connecté.
    Citation Envoyé par stöckli Voir le message
    >> Mr. N

    Base en utf-8 Ok
    Fichiers php en utf-8 Ok
    Content-type en text/html --> C'est peut-être de là que vient le problème?
    Est-ce que ton flux xml contient un tag meta précisant l'encoding utf-8
    heu... là je nage carrément
    Tu dois avoir ça dans le code source html recu par le navigateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>.........
        .....
    C'est la première balise que doit rencontrer le navigateur afin de déterminer l'encoding du flux.

  6. #6
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Citation Envoyé par stöckli Voir le message
    Content-type en text/html --> C'est peut-être de là que vient le problème?
    Ce n'est pas suffisant. Il faut le charset. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Content-Type:	text/html; charset=UTF-8

  7. #7
    mon_nom_est_personne
    Invité(e)
    Par défaut
    Et faut pas non plus oublier de sauvegarder ton fichier php en utf8
    Et ca devrait faire l'affaire. sinon pour regler mes problemes d'encodages j'utilise smarty et je joue avec les post est pre filter pour changer l'encodage final. en gros tout est en utf8 et a la fin, boum je convertie a ce que je veux.

  8. #8
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 29
    Par défaut
    re-merci pour vos conseils.... ça marche sans marcher! ;-)

    Je m'explique: en fait, j'avais visiblement mal cerné le problème: je viens d'ajouter un enregistrement (en cyrillique) à ma base et tout se passe bien (après avoir suivi vos conseils).

    Mais les 1356 enregistrements que j'ai importé, eux, ils continuent à m'afficher des ??????

    J'en déduis donc que le problème vient de l'encodage au moment de l'import de mes données.

    Ce qui déplace le problème, mais ne le résout pas encore...

    Si je résume mon processus:

    1) Un fichier Excel contenant 1356 enregistrements (avec nom et prénom en cyrillique, tout s'affiche bien dans Excel)
    2) J'enregistre en csv
    3) Je rouvre le csv et les noms / prénoms apparaissent comme ?????? (que je l'ouvre avec un tableur ou un éditeur de texte)

    Même si j'essaye de le sauvegarder en UTF-8 (j'utilise PSPad comme éditeur), rien ne change...

    Donc, en gros, comment faire pour exporter depuis Excel vers un format lisible par MySQL (csv ou SQL à priori) et qui ait un encodage correct?

    Je sais, on sort un peu de la rubrique php/MySQL, mais bon, ça reste au moins dans les soucis d'encodage!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Clavier] caractères qui générent des erreurs sous Apache/PHP/MySQL
    Par kolby dans le forum Périphériques
    Réponses: 1
    Dernier message: 12/03/2013, 22h45
  2. [MySQL] Problème avec les caractères turcs PHP/Mysql
    Par sencmaster dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/08/2010, 15h58
  3. [MySQL] Mysql/php et les caractères arabes (réglé)
    Par samad dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/08/2009, 19h31
  4. [PHP-JS] Encodage caractères MySQL vers PHP
    Par poubelle039 dans le forum Langage
    Réponses: 2
    Dernier message: 18/10/2007, 17h46
  5. PHP/MySQL stocker le caractère €
    Par mguinot dans le forum Requêtes
    Réponses: 1
    Dernier message: 30/05/2006, 16h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo