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 :

Codage de caractères (UTF-8 et ISO-8859-1) [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Points : 114
    Points
    114
    Par défaut Codage de caractères (UTF-8 et ISO-8859-1)
    Bonjour,

    J'ai :
    - un serveur web httpd 2.4.3
    - un serveur de bases de données mysql 5.5.27
    - un interpréteur de scripts php 5.4.7
    - un navigateur web firefox 15.0.1

    J'ai ce fichier test.sql qui crée une table et insère deux tuples :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DROP TABLE IF EXISTS `mytable`;
    CREATE TABLE `mytable`
    (
    	`id` int(11) NOT NULL AUTO_INCREMENT,
    	`value` varchar(255) DEFAULT NULL,
    	PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    INSERT INTO `mytable` VALUES (1,'àbc'),(2, 'déf');

    J'ai ce fichier test.php qui affiche les valeurs stockées dans ma table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    mysql_connect("localhost", "root", '...');
    mysql_select_db("mydatabase");
    $query = "SELECT * FROM mytable";
    $result = mysql_query($query);
    $array = mysql_fetch_array($result);
    echo $array['value'];
    ?>
    Voici mes manipulations pour la base de données :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ mysql -u root -p
    create database mydatabase;
    SET NAMES utf8;
    source test.sql
    SELECT * FROM mytable;
    Jusqu'ici le résultat est bon :
    SELECT * FROM mytable;
    +----+-------+
    | id | value |
    +----+-------+
    |  1 | àbc   |
    |  2 | déf   |
    +----+-------+
    2 rows in set (0.00 sec)
    Ensuite, au niveau de PHP, je commence par tester en ligne de commandes :
    Encore ici, le résultat est bon :
    àbc
    Là ou ça coince, c'est quand je passe par mon serveur web :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ cp test.php ~/public_html/
    $ firefox http://localhost/~yugiohjcj/test.php &
    J'obtiens un losange noir avec un point d'interrogation blanc à l'intérieur à la place de "à".

    J'ai regardé l'encodage de mon navigateur web, il est en UTF-8 (View>Character Encoding>UTF-8).
    Par contre, si je passe mon navigateur web en ISO-8859-1, alors le caractère s'affiche correctement.

    Est-ce que vous voyez pourquoi mon caractère ne s'affiche pas correctement en UTF-8 ?

    Merci.

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    vérifie ou précise le charset envoyé au navigateur par ta page php.

  3. #3
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 216
    Points : 4 697
    Points
    4 697
    Par défaut
    et utilise pdo , l'extension mysql est obselete

  4. #4
    Membre régulier Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Points : 114
    Points
    114
    Par défaut
    J'ai trouvé la solution.

    La première solution est d'utiliser les variables globales dans le client MySQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    show variables like 'c%';
    set global character_set_database = utf8;
    Ensuite, il faut redémarrer le serveur et vérifier si les variables ont changé.

    Si ça ne fonctionne pas (ça peut arriver sur certaines versions de MySQL), la deuxième solution consiste à modifier le fichier de configuration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ cat /etc/my.cnf 
    [client]
    default-character-set=utf8
     
    [mysql]
    default-character-set=utf8
     
    [mysqld]
    collation-server = utf8_unicode_ci
    init-connect='SET NAMES utf8'
    character-set-server = utf8
    Si le problème de caractères accentués persiste, c'est parce que j'utilise la fonction htmlentities qui encode en UTF-8 que depuis PHP 5.4.0.
    Donc, il faut faire attention à utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    htmlentities($data, ENT_IGNORE, "UTF-8");
    lorsqu'on possède une vieille version de PHP.

    Problème résolu.

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

Discussions similaires

  1. [1.x] Encodage UTF-8 et ISO-8859-1
    Par Alahel dans le forum Symfony
    Réponses: 8
    Dernier message: 09/09/2008, 11h52
  2. Encoder une exception UTF-8 en ISO-8859-1
    Par Brunettia dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 10/06/2008, 11h36
  3. UTF-8 to ISO-8859-1
    Par iso9mix dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 04/01/2008, 13h38
  4. Encodage : Conversion UTF-8 vers ISO-8859-?
    Par polo54 dans le forum Général Java
    Réponses: 6
    Dernier message: 26/06/2007, 19h10
  5. encodage UTF-8 vers ISO-8859-1
    Par taouja dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 13/04/2007, 11h03

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