Car. accentués remplacés par "?" PHP/MyS

Fermé
J-Luc - 28 août 2009 à 00:14
 le père - 28 août 2009 à 10:21
Bonjour,

Ca fait des années que je développe en php/mysql et là il m'arrive un truc jamais rencontré que je ne sais pas résoudre après y avoir passé des plombes à secouer mon script dans tous les sens.

J'ai une requête SQL INSERT INTO qui me remplace tous les caractères accentués par des "?" :

$sql="INSERT INTO matable (monchamp) VALUES("étrange")";
$req=mysql_query($sql);

et dans la table, quand je regarde avec phpmyadmin ou que je relie la table j'ai "?trange" à la place de "étrange". J'imagine bien que c'est un problème de jeu de caractère mais j'ai essayé plusieurs solutions comme passer de "latin1_general_ci" à "utf8_general_ci" par exemple mais rien n'y fait (dans ce cas mon champ est tronqué au premier caractère accentué et "tronquée" devient "tronqu")

Quand je fais un echo $sql; et que je fais un copier-coller de la requête dans myphpadmin j'ai bien les accents (que je copie à partir de la page affichée dans le navigateur ou de la source générée par le script php)

Quelqu'un peut m'aider ?
A voir également:

8 réponses

monkey_monk Messages postés 641 Date d'inscription mercredi 1 juillet 2009 Statut Membre Dernière intervention 10 août 2012 130
28 août 2009 à 00:41
Bonjour,

je ne suis pas un spécialiste en la matière mais je sais qu'il arrive parfois que le jeu de caractère change entre ta bdd et ton php... il faudrait voir niveau config.

En gros tu devras transformer les infos de ta bdd pour les lire via ton php et puis faire l'inverse pour les placer dans ta bdd.

Je ne suis pas d'une grande aide mais j'espère avoir un peu fait avancer le problème !

Bon courage ! :D
0
Oui, c'est un truc comme ça qu'il faut faire. je vais finir par les mettre dans la base sous la forme de caractères html (é etc.) et les décoder à la lecture mais ce qui m'arrive est vraiment étrange parce que je ne vois pas du tout la différence entre ce que je fais dans cette table et ce que je fais dans d'autres tables où ça marche très bien.
0
Bonjour

j'ai essayé plusieurs solutions comme passer de "latin1_general_ci" à "utf8_general_ci"
Il ne faut pas "essayer", il faut te décider à travailler en latin ou en utf8 et en tenir compte à tous les niveaux.
. encodage dans ton éditeur de texte pour écrire tes pages (php/html)
. balise meta "Content-Type" dans tes pages html
. collation de tes tables mysql
. requête SET NAMES UTF8 si tu travailles en utf8
(j'espère que je n'en oublie pas)
Tant que tu essaieras de jouer sur un seul de ces paramètres, il faut t'attendre à des problèmes.
0
Après quelques essais, si tu as l'impression que ça vient d'une requête, je pense que le formulaire d'où vient la donnée doit avoir un charset différent (ou absent). Le ?trange" est typique des informations saisies en latin (iso-8859-1) mais affichées en utf8
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Les données ne viennent pas d'un formulaire mais d'un fichier texte que je lis par un file_get_contents.

Par acquis de conscience j'ai essayé en entrant des accents en dur comme dans l'exemple que j'ai donné :

$sql="INSERT INTO matable (monchamp) VALUES('étrange')";
$req=mysql_query($sql);

Et ça marche pas, évidement si je lance la requête INSERT INTO matable (monchamp) VALUES("étrange") dans phpmyadmin ça marche très bien.

Bon, j'ai commencé à modifier mes scripts en stockant les infos avec un htmlentities pour remplacer les accents et ça marche mieux
0
ça marche mieux mais ça cache le fond tu problème...
visiblement, ta source de données (fichier) et ton éditeur sont en iso8859-x alors que ton affichage est en utf-8. Ta solution est boîteuse et tu vas désormais voir & eacute; dans ta base à la place des é...
Alors que PHP et mysql fournissent tous les moyens d'avoir un affichage clair à tous les niveaux
0
Je sais que c'est boiteux mais au moins ça va me permettre d'avancer quitte à revenir plus tard sur ce problème. Il est tout de même étrange que sur d'autres tables qui n'ont apparemment pas de différence avec celle qui me pose un problème ça marche très bien. Je n'ai pourtant pas l'impression de faire quelque chose de particulier.

Merci de ton aide.
0
Les autres tables avaient-elles été remplies à partir de fichiers texte ? Si oui, c'est qu'ils avaient un encodage différent
0