Problème d'encodage PDO/Mysql/PHP - PHP - Programmation
Marsh Posté le 17-10-2011 à 01:34:38
Je viens de régler à moitié mon problème. Lorsqu'à la connexion je mets, $connexion->exec('SET NAMES utf8');, les caractères s'affichent convenablement. En revanche, lorsque j'utilise la même instruction d'encodage pour l'insertion de données dans la BDD, ça bug ! Bizarre...
Marsh Posté le 17-10-2011 à 10:26:39
En général, pour ne pas avoir de problèmes avec l'utf-8, il faut ces trois éléments réunis :
- Tables et champs de la base de données en utf8_*. Pour toi ça a l'air bon.
- Connexion à la base en utf-8. Pour toi ça a l'air bon puisque tu exécutes une requête SET NAMES.
- Encodage des fichiers en utf-8. Il faut que tes fichiers de code soient bien encodés en utf-8. Là, ça dépend de ce que tu utilises comme éditeur de texte ou IDE. Je te laisse vérifier que ton éditeur est bien configuré pour encoder tes fichiers en utf-8, et remettre l'attribut charset="UTF-8" dans ton code.
Marsh Posté le 17-10-2011 à 13:41:59
Absolument tout est en UTF-8 mais rien n'y fait.
Quand je souhaite insérer des éléments dans la BDD avec SET NAMES, l'insertion pour chaque champ s'arrête au premier caractère accentué rencontré et sans SET NAMES, tout marche.
A l'inverse, quand je souhaite sélectionner des éléments de la BDD avec SET NAMES, ça marche nickel et sans SET NAMES, ça ne m'affiche pas certains caractères accentués.
Donc, ce que je fais maintenant, c'est d'utiliser SET NAMES juste pour le SELECT et ça marche bien mais je trouve quand même ça bizarre.
Marsh Posté le 17-10-2011 à 14:01:03
Je viens de comprendre le problème.Les caractères que j'insérais n'étaient pas en utf8.
J'avais créé il y a quelques années des centaines de pages HTML (je n'utilisais pas de BDD à l'époque) avec un charset=ISO-8859-1.
Voulant récupérer toutes ces données aujourd'hui, je voulais les mettre dans une BDD mais pas une par une (trop long). C'est pour cela que j'ai créé un script qui lit les pages et qui ajoute champ par champ mes données.
Tout était en UTF-8 sauf les pages html que j'essayais de lire, voilà pourquoi ça bugait.
Merci de ta réponse Tirkyth !
Marsh Posté le 02-03-2014 à 18:04:54
lofo7 a écrit : Je viens de comprendre le problème.Les caractères que j'insérais n'étaient pas en utf8. |
Comment as tu réussi a resoudre ton probleme? Merci
Marsh Posté le 17-10-2011 à 00:38:05
Hello,
j'ai un problème d'encodage que je ne comprends pas.
Chaque colonne de mes tables de ma BDD mysql sont en "utf8_general_ci". Sur ma page PHP, j'utilise également le charset=UTF-8 mais quand j'affiche mes pages, les caractères accentués s'affiche mal.
En revanche, quand ma page PHP a un charset=ISO-8859-1, tout s'affiche comme il faut.
Dernier point : quand je veux insérer des données dans ma BDD, si j'utilise ($mysql->exec('SET NAMES utf8');, l'insertion pour chaque champ s'arrête au premier caractère accentué rencontré, et si je ne mets pas d'instruction d'encodage, tout se passe bien.
Comment cela se fait-il ?
Merci