Problème Encodage Base de donnée phpMyAdmin

Résolu/Fermé
Signaler
Messages postés
6
Date d'inscription
jeudi 28 février 2013
Statut
Membre
Dernière intervention
3 mars 2013
-
Messages postés
89
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
15 juin 2014
-
Bonjour,

J'ai un problème d'encodage au niveau de ma base de donnée phpMyAdmin. Le problème est le suivant:
Sur mon site web, j'ai réalisé un formulaire, qui une fois validé est traité et envoyé à ma base de donnée. Cependant, bien que mon interclassement du champ en question soit en utf8_general_ci , les informations qui arrivent sur ma base de donnée sont en caractères spéciaux, j'ai par exemple des caractères de ce genre: "expÃf©rimentÃf© â€Â" .
Je suis obligé de modifier manuellement dans ma base de donnée pour que l'affichage sur mon site web se fasse correctement. J'ai essayé plein de choses ( mettre un utf8_encode() avant l'envoie à la base de donnée ) mais rien n'y fait, je ne sais comment résoudre ce problème.

J'espère avoir été assez clair, d'avance merci

6 réponses


Bonjour

Il ne suffit pas de définir tes tables en utf8, il faut aussi l'indiquer quand tu te connectes à mysql :

$bdd=
    new PDO('mysql:host=localhost; dbname=film', 'root',
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
          PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
          PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC );

Tu n'es pas obligé d'utiliser les options PDO::ATTR_ERRMODE et PDO::ATTR_DEFAULT_FETCH_MODE qui correspondent à mes préférences personnelles.

Par contre, n'utilise jamais utf8_decode juste pour voir si ça marche mieux comme ça. Cette fonction n'a strictement rien à faire dans un site construit en utf8, sauf dans des cas très particuliers, par exemple si tu veux créer un fichier en iso-8859-1 à partir de tes données en utf-8.
4
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Pour moi ce code a parfaitement fonctionné et à régler totu mes soucis.
Un grand merci Padre ! :p

try
{
$bdd = new PDO('mysql:host=localhost;dbname=bd1', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 667
Bonjour,

1- vérifie le charset de ta page php. Il doit être en utf-8.
2- tu as peut être dans ton code, ce genre de "test" :
$monmessage=htmlentities($monmessage, ENT_QUOTES); 
ou
$montext = htmlspecialchars($montext, ENT_QUOTES);


à remplacer comme ceci :
$monmessage=htmlentities($monmessage, ENT_QUOTES, "UTF-8");
ou
$montext = htmlspecialchars($montext, ENT_QUOTES, 'UTF-8');

ou alors, ne pas hésiter à utiliser utf8_decode :
$montext = utf8_decode($montext);
Messages postés
6
Date d'inscription
jeudi 28 février 2013
Statut
Membre
Dernière intervention
3 mars 2013

Merci d'avoir répondu, cependant ça ne fonctionne pas. Voici mon code:

<?php
try
{
$bdd = new PDO('mysql:host=localhost; dbname=film', 'root', '') ;
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
if (!empty($_POST['titre']))
{
$titre=$_POST['titre'] ;
$nationalite=$_POST['nationalite'] ;
$real=$_POST['realisateur'] ;
$genre=$_POST['genre'] ;
$acteur=$_POST['acteur'] ;
$epoque=$_POST['epoque'] ;
$annee=$_POST['annee'] ;
$duree=$_POST['duree'] ;
$resume=$_POST['resume'] ;
$note=$_POST['note'] ;

if (!empty($_FILES['pochette']))
{
if ($_FILES['pochette']['size'] <= 4000000) // on autorise une taille maxi de pochette ? Mo
{
$infosfichier=pathinfo($_FILES['pochette']['name']) ;
$extension_upload=$infosfichier['extension'] ; // Extension du fichier
$extensions_autorisees = array('jpg', 'jpeg', 'png') ;
if (in_array($extension_upload, $extensions_autorisees))
{
$nomfichier=$titre ;
move_uploaded_file($_FILES['pochette']['tmp_name'],"pochettes/$nomfichier.$extension_upload") ; // Déplace un fichier
$pochette="pochettes/$titre.$extension_upload" ;
echo "Fichier envoyé" ;
}
else {
echo ("Extension non valide") ;
header('Refresh: 1, URL=membre.php');
}
}
else {echo "Taille du fichier non valide";
header('Refresh: 1, URL=membre.php');}
}
}
$reqAjout=$bdd->prepare('INSERT INTO film (titre, nationalite, realisateur, genre, resume, pochette, acteur, epoque, annee, date_ajout, note, duree) VALUES (:titre, :nationalite, :realisateur, :genre, :resume, :pochette, :acteur, :epoque, :annee, CURDATE(), :note, :duree)');
$reqAjout->execute(array(
'titre' => $titre,
'nationalite'=> $nationalite,
'realisateur' => $real,
'genre' => $genre,
'resume' => htmlspecialchars($resume, ENT_QUOTES, 'UTF-8'),
'pochette' => $pochette,
'acteur' => $acteur,
'epoque' => $epoque,
'annee' => $annee,
'note' => $note,
'duree'=>$duree)) ;
echo "<br>Le film a été ajouté à la base de donnée" ;
header('Refresh: 1, URL=membre.php') ;
?>

Le echo "<br>Le film a été ajouté à la base de donnée" ; s'affiche correctement, la page est bien en utf8, le problème vient de la base de donnée qui ne récuepre pas le bon formulaire avec le bon encodage ( j'ai par exemple des Endetté jusqu'au cou dans une affaire de water bed ) dans mon champ résumé de ma table bien que celle çi soit bien en utf8_general_ci ... Je ne comprends pas et je ne sais quoi faire...
Messages postés
6
Date d'inscription
jeudi 28 février 2013
Statut
Membre
Dernière intervention
3 mars 2013

C'est mieux, il n'y a plus que deux choses qui ne s'affichent pas correctement il s'agit des apostrophes, les accents fonctionnent.
Seuls les ' et " ne sont pas bien affichés ( même dans ma base de donnée ) toujours lors de l'envoie de mon formulaire (si je modifie manuellement dans ma base de donnée, l'affichage se fait bien)..

Qu'entends-tu par 'pas bien affichés' ?
Si sur ton système magic_quotes_gpc est à 1, alors dans les données que tu reçois par $_POST,$_GET ou $_COOKIES les apostrophes sont précédés du backslash (\). Il faut donc les supprimer en faisant :
$titre=stripslashes($_POST['titre'] ;) , etc...

Il ne faut pas utiliser htmlspecialchars ou htmlentities avant d' enregistrer les données dans la base, par contre il faut obligatoirement utiliser htmlspecialchars pour l'envoi des données si tu veux qu'elles apparaissent telles qu'elles avaient été saisies.
Messages postés
89
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
15 juin 2014
25
Mon père vous m'étonnez !

Le set NAMES utf8 suivi du GPC, je suis ébloui par vos connaissance !
Tel un disciple je m'agenouille et je prie, pour un jour vous arriver à la cheville !

Lol ! (pardon je m'égare !)
Mais c'est bien vu, ca sent le vécu !
Messages postés
6
Date d'inscription
jeudi 28 février 2013
Statut
Membre
Dernière intervention
3 mars 2013

ça fonctionne enfin, j'ai retiré tous mes htmlspecialchars ( avant d'enregistrer les données dans la de donnée ) et j'ai retiré mes utf8_encode avant d'afficher sur le site. Merci à toi !