Encoding / character set avec PHP / Postgres
Salut,
j'ai un soucis avec l'affichage des données qui viennent d'une base Postgres. La base est en UTF8 d'apres moi. Si vous connaissez une autre méthode pour confirmer, je suis preneur. La commande "\list" m'affiche UTF8 comme encoding.
En ligne de commande, dans postgres, j'affiche le caractère ascii d'un "É". La requete me retourne bien le code 201, ce qui est correct.
select ref, ascii(substring(ref,5)),substring(ref,5) from table where id = 32676;
ref |
ascii |
substring |
BIOLÉ |
201 |
É |
(1 row)
Ensuite, j'ai une page PHP qui tourne sur un serveur apache sous windows, et qui fait ce meme select et affiche le résultat. Le fichier php est encodé en UTF-8, et j'ai ces 4 lignes dedans :
mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
mb_http_input('UTF-8');
mb_regex_encoding('UTF-8');
Pour la connection à postgres, je fais pg_pconnect puis pg_query. Rien de plus.
Sur la page web, le "É" est correctement affiché. Par contre, lorsque j'affiche le code ASCII de ce "É", il est indiqué 195 - 137 au lieu de 201. D'où pourrait provenir cette transformation du code ASCII d'apres vous ? et pourquoi l'accent est il correctement affiché si le code ASCII est modifié ?
a force de bricoler, j'ai essayé de jouer avec la fonction pg_set_client_encoding. Si je set l'encoding en UTF8, ca ne change rien.
Si je le set à WIN1252 ou LATIN1, alors le code ASCII affiché est bien le 201, mais alors la page n'affiche plus "É" mais le point d'interrogation dans un losange noir �
des idées ?
merci