Problème de caractère !

Quand j'affiche des infos de ma base de donnée j'ai des � à la place des é, è, à ... On m'a dit :
Change d'encodage en Utf-8_general_ci mais ca me dit :

Erreur de requête:
#1366 - Incorrect string value: '\xE9ant' for column 'Nom_jeu' at row 2

Merci Fab1205

4 réponses

  1. Qu'est ce qu'il y a de faux :

    <?php
    $dns = "mysql:jeux;host=localhost;charset=utf8";
    
    $user = 'root';
    $password = '';
    
    try {
        $bdd = new PDO($dsn, $user, $password);
        $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        echo 'Échec lors de la connexion : ' . $e->getMessage();
    }
    
    $reponse = $bdd->query('SELECT * FROM jeux WHERE Nom_jeu LIKE "a%" ORDER By Nom_jeu');
    ?>
    <center>
    <table class="table-apres-midi-jeux">
    <caption class="caption-apres-midi-jeux">
       <th class="caption-apres-midi-jeux">N°</th>
       <th class="caption-apres-midi-jeux">Nom</th>
       <th class="caption-apres-midi-jeux">Editeur</th>
       <th class="caption-apres-midi-jeux">Catégorie</th>
       <th class="caption-apres-midi-jeux">Âge min</th>
       <th class="caption-apres-midi-jeux">Prix</th>
    </caption>
    <?php
    while ($donnees = $reponse->fetch())
    {
    ?>
                    <tr>
                        <td class="td-apres-midi-jeux"><?php echo $donnees['Numero_jeu'];?></th>
                        <td class="td-apres-midi-jeux"><?php echo $donnees['Nom_jeu'];?></th>
                        <td class="td-apres-midi-jeux"><?php echo $donnees['Editeur'];?></th>
                        <td class="td-apres-midi-jeux"><?php echo $donnees['Categorie'];?></th>
                        <td class="td-apres-midi-jeux"><?php echo $donnees['Age_min'];?></th>
                        <td class="td-apres-midi-jeux"><?php echo $donnees['Prix_location'];?></th>
                    </tr>
    <?php
    }
    $reponse->closeCursor();
    ?>
    1. Quel est le problème ?
  2. Oui mais ma base de donnée est déjà faite.

    Merci
    Fab1205
    1. Dans ce cas la, récupère les données dans ta base puis essaye :

      $var = utf8_encode($var);
      echo $var;
    2. Pour convertir ta table, depuis l'onglet requête de phpmyadmin tu peux faire :
      ALTER TABLE {tablename} CONVERT TO CHARACTER SET utf8


      Pour la connexion à ta base de donnée, si tu utilises PDO, tu peux définir l'encode comme ça:

      $dsn = "mysql:NOM_DE_LA_TABLE;host=HOTE;charset=utf8";
      $user = 'USER';
      $password = 'PASSWORD';
      
      try {
          $bdd = new PDO($dsn, $user, $password);
          $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      } catch (PDOException $e) {
          echo 'Échec lors de la connexion : ' . $e->getMessage();
      }


      Puis dans tes pages, tu définies l'encodage en utf8 dans le head :

      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      </head>

      ça devrait corriger le problème :)
  3. Salut,

    Si ta table est en ISO-8859-1 tu peux faire :

    $var = "Qu'est-ce que la vie sinon l'ombre d'un rêve éphémère ?";
    $var = utf8_decode($var);

    Cordialement

    1. a faire avant l'envoie dans ta base, puis :

      $var = utf8_encode($var);

      Pour l'affichage sur ton site.