Problème d'affichage d'accentuation MySQL.
Résolu/Fermé
reverb94
Messages postés
106
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
7 janvier 2014
-
28 mars 2013 à 10:51
reverb94 Messages postés 106 Date d'inscription jeudi 7 mars 2013 Statut Membre Dernière intervention 7 janvier 2014 - 31 mars 2013 à 16:30
reverb94 Messages postés 106 Date d'inscription jeudi 7 mars 2013 Statut Membre Dernière intervention 7 janvier 2014 - 31 mars 2013 à 16:30
A voir également:
- Problème d'affichage d'accentuation MySQL.
- Affichage double ecran - Guide
- Mysql community server - Télécharger - Bases de données
- Problème affichage fenêtre windows 10 - Guide
- Windows 11 affichage classique - Guide
- Comment agrandir l'affichage de l'écran - Guide
3 réponses
sisr
Messages postés
11
Date d'inscription
jeudi 28 mars 2013
Statut
Membre
Dernière intervention
3 juin 2013
5
28 mars 2013 à 15:14
28 mars 2013 à 15:14
Le fait de préciser "ma table est en UTF-8" alors qu'avant c'était "ma table est en latin" ne transforme pas les données contenues dans la table : s'il y avait des accents ASCII-étendu dans les donnés, ils y sont toujours même après que vous ayez changé l'encoding de la table.
Quand j'ai ce problème, je fais un programme PHP qui parcours toutes les données de la table, la tansforme avec la fonction utf8_decode (ou utf8_encode dans votre cas), puis je réécris les données dans la table. J'imagine qu'il y a peut-être plus simple.
Quand j'ai ce problème, je fais un programme PHP qui parcours toutes les données de la table, la tansforme avec la fonction utf8_decode (ou utf8_encode dans votre cas), puis je réécris les données dans la table. J'imagine qu'il y a peut-être plus simple.
sisr
Messages postés
11
Date d'inscription
jeudi 28 mars 2013
Statut
Membre
Dernière intervention
3 juin 2013
5
28 mars 2013 à 11:10
28 mars 2013 à 11:10
Le "?" est typique : c'est lorsqu'on a des accents encodés à la source en latin, mais qu'on essaie d'interpréter comme si c'était de l'UTF8. Cela arrive par exemple si on a une page Web qui contient des accents (du point de vu du code ASCII étendu, donc du latin), et qu'on a un charset=utf-8 au début de la page Web qui affiche ça.
En ce qui concerne l'antislashe en trop, ça n'a rien à voir : c'est parce qu'on fait un double échappement. Cela peut arriver par exemple :
- quand on utilise deux fois la fonction mysql_real_escape_string
- quand on utilise une seule fois mysql_real_escape_string alors que l'option magic_quote_gpc est à on dans le php.ini.
En ce qui concerne l'antislashe en trop, ça n'a rien à voir : c'est parce qu'on fait un double échappement. Cela peut arriver par exemple :
- quand on utilise deux fois la fonction mysql_real_escape_string
- quand on utilise une seule fois mysql_real_escape_string alors que l'option magic_quote_gpc est à on dans le php.ini.
reverb94
Messages postés
106
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
7 janvier 2014
1
28 mars 2013 à 14:16
28 mars 2013 à 14:16
Bonjour,
Effectivement, mes tables était encodé en latin1, j'ai donc corrigé par utf8_general_ci mais le problème perciste :/
Que faire :s
merci de ton aide.
Effectivement, mes tables était encodé en latin1, j'ai donc corrigé par utf8_general_ci mais le problème perciste :/
Que faire :s
merci de ton aide.
reverb94
Messages postés
106
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
7 janvier 2014
1
28 mars 2013 à 17:36
28 mars 2013 à 17:36
Re,
y-aurait-il possibilité de me donner un exemple de ce programme PHP qui parcours toutes les données d'une table pour la transformer avec la fonction utf8_decode je suis totalement perdu :/ mon interclassement ne me propose pas utf8_encode ou decode :/ je doit surement mal comprendre.
Merci pour ton aide.
y-aurait-il possibilité de me donner un exemple de ce programme PHP qui parcours toutes les données d'une table pour la transformer avec la fonction utf8_decode je suis totalement perdu :/ mon interclassement ne me propose pas utf8_encode ou decode :/ je doit surement mal comprendre.
Merci pour ton aide.
sisr
Messages postés
11
Date d'inscription
jeudi 28 mars 2013
Statut
Membre
Dernière intervention
3 juin 2013
5
28 mars 2013 à 18:04
28 mars 2013 à 18:04
- include "connexion.php" s'occupe du mysql_connect et mysql_select_db
- ma_table, champ1, champ2 sont à remplacer par les valeurs appropriées.
- identifiant est le champ qui sert de clé primaire dans la table.
- j'ai mis utf8_encode pour m'adapter à votre cas (moi j'avais utf8_decode pour transformer depuis utf8 vers latin).
<?php
include("connexion.php");
$recordset = mysql_query("select * from ma_table");
while ($record = mysql_fetch_assoc($recordset))
{
$champ1 = mysql_real_escape_string(utf8_encode($record["champ1"]));
$champ2 = mysql_real_escape_string(utf8_encode($record["champ2"]));
// idem avec tous les champs textes nécessaires
mysql_query ("update ma_table set
champ1 = \"$champ1\",
champ2 = \"$champ2\"
where identifiant = {$record["identifiant"]}");
}
echo "Terminé !";
?>
- ma_table, champ1, champ2 sont à remplacer par les valeurs appropriées.
- identifiant est le champ qui sert de clé primaire dans la table.
- j'ai mis utf8_encode pour m'adapter à votre cas (moi j'avais utf8_decode pour transformer depuis utf8 vers latin).
<?php
include("connexion.php");
$recordset = mysql_query("select * from ma_table");
while ($record = mysql_fetch_assoc($recordset))
{
$champ1 = mysql_real_escape_string(utf8_encode($record["champ1"]));
$champ2 = mysql_real_escape_string(utf8_encode($record["champ2"]));
// idem avec tous les champs textes nécessaires
mysql_query ("update ma_table set
champ1 = \"$champ1\",
champ2 = \"$champ2\"
where identifiant = {$record["identifiant"]}");
}
echo "Terminé !";
?>
sisr
Messages postés
11
Date d'inscription
jeudi 28 mars 2013
Statut
Membre
Dernière intervention
3 juin 2013
5
28 mars 2013 à 18:08
28 mars 2013 à 18:08
utf8_decode et utf8_encode ne sont pas des interclassements, mais des fonctions PHP qui permettent de passer d'un encodage à l'autre. C'est ce qu'il vous faut car vous avez des données en latin mais vous voudriez qu'elles soient en utf8.
Le fait de changer d'interclassement dans MySQL sert juste à préciser à MySQL comment sont encodées nos données, car MySQL ne peut pas le deviner tout seul. En aucun cas cela change l'encodage des données à la base.
Une solution plus simple, peut-être, dans votre cas, est d'accepter que vos données soient encodées en latin et de les traiter comme tel. Si vous voulez absolument changer l'encodage pour utf8, utilisez le code PHP ci-dessus (à moins que quelqu'un ait une solution plus simple).
Le fait de changer d'interclassement dans MySQL sert juste à préciser à MySQL comment sont encodées nos données, car MySQL ne peut pas le deviner tout seul. En aucun cas cela change l'encodage des données à la base.
Une solution plus simple, peut-être, dans votre cas, est d'accepter que vos données soient encodées en latin et de les traiter comme tel. Si vous voulez absolument changer l'encodage pour utf8, utilisez le code PHP ci-dessus (à moins que quelqu'un ait une solution plus simple).
reverb94
Messages postés
106
Date d'inscription
jeudi 7 mars 2013
Statut
Membre
Dernière intervention
7 janvier 2014
1
31 mars 2013 à 16:30
31 mars 2013 à 16:30
Merci pour votre aide, j'ai trouvé la solution qui convient à mon problème
et pour les / utiliser stripslashes()
comme ceci :
si sa peu aider pour d'autre :).
$bdd = new PDO('mysql:host=localhost;dbname=nom_de_la_base;charset=utf8', 'login', 'mot_de_passe', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'/*, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION*/));
et pour les / utiliser stripslashes()
comme ceci :
<?php echo stripslashes($_GET['description']); ?>
si sa peu aider pour d'autre :).