[RESOLU] Problème de caractère en injectant des requêtes avec php PDO dans mysql

Petit nouveau ! | 8 Messages

09 févr. 2020, 22:06

Bonjour,
J'ai réalisé un petit code, qui lit un fichier text, contenant des requêtes sql.
Je lis ligne par ligne et j'injecte dans une table mysql.
En fait ce sont des lignes de requête d'un forum phpbb que je tente de déplacer sur un serveur local depuis les fichiers de sauvegarde du forum.
Tout fonctionne bien, mise a par que dans la base de donnée les caractères accentués sont remplacés par d'autres caractères.
la base est en utf8_bin les tables aussi.
Si j'affiche la requête a injecter, je l'affiche sur le dom, qui s'affiche correctement.
Le tout est stocké sur un serveur local debian 8, et j’exécute le code depuis un pc distant avec chrome.
pour la connexion j'utilise PDO.
Que devrais-je vérifier, ou utiliser pour éviter ce remplacement de caractère, quelle serait la piste?
Merci de votre aide.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

10 févr. 2020, 14:25

Peut être un problème d'indication d'encodage dans ton script au moment de renvoyer l'info au navigateur.
Essaye d'ajouter ça au tout début de ton script :
header('Content-Type: text/html; charset=utf-8');
Si le problème persiste, vérifie avec phpmyadmin que les infos dans ta base s'affichent correctement.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 8 Messages

10 févr. 2020, 19:57

merci de ta réponse @Artur,
Je me suis surement mal exprimé, tout ce que j'affiche avant d'envoyer la requête sql dans la table s'affiche correctement dans la page,
mais une fois que c'est envoyé dans la base, les données avec accent sont écrits dans la base avec des codes du style:

"J'ai commencé il y a 2 ans... "

au lieu de

"J'ai commencé il y a 2 ans..." ,

c'est l'écriture dans la base, ou au moment de l'injection.

voici des extraits de mon code:

Code : Tout sélectionner

$MonTexte = ""; .... $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); .... $dbco->exec($MonTexte);...

et si j'ajoute ceci:

Code : Tout sélectionner

echo $MonTexte;
le texte s'affiche correctement à l'écran.

|*() |*()

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

11 févr. 2020, 12:00

Comment sais-tu qu'ils sont "mal" écrit dans ta base ?
(Pour être sûr que ce soir pas le script qui lit et affiche le contenu de ta base qui pose problème)


Tu peux spécifier le charset de la connexion PDO pour voir si c'est mieux:
$dbco = new PDO("mysql:host=$servname;dbname=$dbname;charset=utf8", $user, $pass);
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 8 Messages

11 févr. 2020, 13:56

Tout simplement en allant lire directement dans la table depuis phpmyadmin, et j'ai observé initialement le pb lorsque, en local, j'ai affiché le forum, pointant sur la bdd locale que j'avais créé avec mon programme. Les accent été tous remplacé.

Ah! bien, merci, je vais essayé ça, effectivement ça pourrait être une très bonne piste!

Petit nouveau ! | 8 Messages

11 févr. 2020, 18:38

Super @rthur, c’était bien ca, en joutant ;charset=utf8 tout a fonctionné correctement!

Merci beaucoup de ton aide!