Vous n'êtes pas identifié(e).
Pages : 1
Bonjour tout le monde,
J'ai un petit problème lourd de conséquences : il m'est impossible d'insérer dans mes tables des caractères accentués via la fonction PHP pg_query().
Le retour de pg_last_error() m'indique :" ERREUR: séquence d'octets invalide pour l'encodage « UTF8 » : 0xe9272c HINT: Cette erreur peut aussi survenir si la séquence d'octets ne correspond pas au jeu de caractères attendu par le serveur, le jeu étant contrôlé par « client_encoding »."
Message d'erreur assez semblable à une discussion dans ce même topic, mais rien n'y fait !
Cependant avec phpPgAdmin et psql, il m'est tout à fait possible d'insérer ces caractères spéciaux...
Donc bon, je ne sais pas si c'est mon code php qui foire, ou le serveur qui pédale.
Je vous remercie d'avance .
Hors ligne
Moi je parie sur le code PHP
Bon, trêve de plaisanteries…
- Quel est l'encodage client quand est exécutée la requête ? (afficher dans le code PHP le résultat de la commande SQL 'SHOW client_encoding;'
- Quel est l'encodage du fichier PHP ? (on peut certainement obtenir l'information avec l'éditeur de fichier, mais ça dépend du système d'exploitation et de l'éditeur, évidemment)
Marc.
Hors ligne
Le "SHOW client_encoding;" me retourne UTF8.
Et Geany, mon éditeur, me dit que ma page est encodée en ... UTF8 !
J'avoue ne pas comprendre...
Hors ligne
Moi non plus
C'est quoi l'ordre SQL exact ?
Marc.
Hors ligne
C'est un INSERT INTO tout ce qu'il y a de plus banal :
INSERT INTO contact VALUES(
defautl,
'leNomDuContact',
'lePrénomDuContact',
etc...
);
Le problème survient dès que j'essaie d'insérer un Nom ou Prénom avec un caractère accentué, sinon, pas de problème.
Hors ligne
Et le nom et le prénom accentués, ils proviennent d'où ? Est-ce qu'ils sont bien en UTF-8 ?
Marc.
Hors ligne
Ils proviennent d'un formulaire via la méthode POST. L'encodage de ce formulaire est aussi en UTF-8.
Hors ligne
C'est louche. Il faudrait vérifier qu'ils arrivent bien dans le bon encodage. Par ce que la zone E9 en hexa, pour utf8, c'est une zone réservée, il n'y a aucune raison qu'on vous envoie ça en utf8. C'est d'ailleurs pour cela que postgres refuse la donnée.
=> Pouvez-vous vérifier leur encodage ? (en les envoyant dans un fichier, et en faisant 'file' dessus puisque vous semblez être sous Linux)
Marc.
Hors ligne
Bingo !
Les variables ne sont pas encodées en UTF-8.
Je vais juste les ré-encoder avec mb_convert_encoding($maVar, 'UTF-8').
L'insertion fonctionne !
Merci Marc !
Hors ligne
C'est tout de même étrange. Cela laisse supposer que le navigateur ne poste pas des données correctes (pas dans le bon encodage). Il faudrait le résoudre de ce côté là plutôt, non ?
Marc.
Hors ligne
J'utilise Chromium, Google Chrome version libre.
Je me pencherai dessus dès que j'aurais le temps d'assouvir cette curiosité.
En attendant, ça marche et c'est le principal !
Le jury devant lequel je vais passer n'en tiendra sûrement pas compte...
Hors ligne
Pages : 1