Problème d'accents en utilisant ajax

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

j'ai un petit problème d'accent au moment où j'utilise ajax bizarrement… Mes "é" apparaissent en "�". Et quand je tente un utf8_decode() ça me donne un "?". Quand je fais une requête direct en php (sans ajax), mes accents apparaissent correctement.

  • Ma page html: <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type" />
  • Mon serveur: Jeu de caractères du serveur : UTF-8 Unicode (utf8)

En regardant sur google, j'ai bien tenté d'harmoniser la page html en utf8… mais tout devient "�".

Jcapte pas :(

Édité par alex4gous

+0 -0
Staff

Forcément, si tu injectes de l'UTF-8 dans un document indiqué comme étant en ISO-9959-1 ça passe pas.

Donc soit tu fais de l'UTF-8 d'un bout à l'autre, soit tu restes en ISO partout, mais ne mélange pas tout.


Au passage, la meta http-equiv en général on évite : il y a les headers (via PHP ou directives Apache) pour ça.

D'ailleurs en HTML5 cette meta ne sert plus à rien vu qu'il y a la meta charset. ;)

Édité par viki53

Auteur du sujet

J'ai aussi tenté de mettre la méta utf8 à la place, mais ça n'a rien changé :( j'ai oublié de le préciser dans le 1er post je crois.

Dans la page qui reçois l'ajax

1
<meta charset="UTF-8">

Dans la page de traitement de l'ajax:

1
header( 'content-type: text/html; charset=UTF-8' );

Même résultat :( à la différence que maintenant quand je fais une requete mysql (sans passer par l'ajax) ça bug aussi ^^

Ps: wow la rapidité de la réponse, la classe :)

Édité par alex4gous

+0 -0

Forcément, si tu injectes de l'UTF-8 dans un document indiqué comme étant en ISO-9959-1 ça passe pas.

Donc soit tu fais de l'UTF-8 d'un bout à l'autre, soit tu restes en ISO partout, mais ne mélange pas tout.

viki53

J'aurais pas dis mieux, met tout en un seul encodage.

PS : Pour l'UTF-8, choisi l'UTF-8 SANS BOM

PPS : pour un SQL en UTF-8, y a 2 moyens avec la PDO (je n'utilise que la PDO) :

1) si tu te connectes en PDO, ajoute ;charset=utf8 à la fin de ton DSN

Le DSN (et pas DNS :p ), c'est le premier argument que tu donnes lors de la construction de ton objet PDO

Pour MySQL, ça resemble à mysql:host={HOST};dbname={DB_NAME}

2) C'est d'appliquer cette ligne à ta connexion via PDO :

1
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, 'SET NAMES utf8');
+1 -0

PDO c'est le type de connection avec php. Il faudrait que tu vérifies que dans ta page php qui fait la requête te donne aussi des ? si oui alors le problème c'est la requête sinon je ne sais pas trop pour ma part

La culture, c'est comme la confiture, moins on en a, plus on l'étale. -Françoise Sagan

+0 -0

JE t'incite très fortement à tout passer en UTF-8. Certains navigateurs refusent de passer autre chose que de l'UTF-8 via AJAX (même en envoyant les bonnes informations via les en-têtes), et comme déjà dit il faut absolument que tu utilises le même encodage partout sinon il y aura toujours quelque chose qui ne marchera pas.

C'est encore plus vrai si c'est du JSON qui transite via AJAX, UTF-8 étant l'encodage officiel qui doit être utilisé avec JSON. Et comme c'est très souvent le cas…

Ma plateforme avec 23 jeux de société classiques en 6 langues et 13000 joueurs: http://qcsalon.net/ | Apprenez à faire des sites web accessibles http://www.openweb.eu.org/

+0 -0
Auteur du sujet

PDO c'est le type de connection avec php. Il faudrait que tu vérifies que dans ta page php qui fait la requête te donne aussi des ? si oui alors le problème c'est la requête sinon je ne sais pas trop pour ma part

MadaQC

Bah j'avais déjà testé pour savoir où était le problème ça donne ça:

au début: html en iso 8859 et mysql en utf8

  • requete sql normal: é (bref tout va bien)

  • requete ajax: �

  • requete ajax avec utf8_decode(): ?

maintenant: html en uf8 et mysql en utf8

  • requete sql normal: �

  • requete ajax: �

Donc voila… je sais pas vraiment quoi faire du coup dans ma table, l'interclassement c'est "Interclassement utf8_general_ci" dans phpmyadamin, il y a aussi dans paramètre généraux Interclassement pour la connexion au serveur : uf8mb4_général_ci… mais j'ai peur de toucher à ça :/

Édité par alex4gous

+0 -0
Auteur du sujet

la page (qui fait appel à l'ajax):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Date: Thu, 30 Apr 2015 11:35:08 GMT
Server: Apache
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
200 OK

et la page de la requete ajax

1
2
3
4
5
6
7
Date: Thu, 30 Apr 2015 10:53:03 GMT
Server: Apache
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
200 OK

j'ai fait ça avec webdeveloper(module firefox) onglet infos -> entete, je sais pas si c'est ce que tu attendais exactement

+0 -0
Auteur du sujet

Bon petit miracle j'ai rentré ceci(sur les 2 pages) php mysql_set_charset( 'utf8' ); en suivant ce tuto et j'ai enfin mes phrases qui s'affiche correctement…

Bon et la mauvaise nouvelle c'est que je dois utf8_encode certain de mes fichier txt auxquelles je fais appel…

Bizarre tout ça, mais ça marche ^^

Édité par alex4gous

+0 -0
Staff

C'est bien ça.

Et tes fichiers PHP sont bien tous encodés en UTF-8 sans BOM ? Idem pour la connexion à la BDD ?


[EDIT] Pour les fichiers texte, il faut revoir leur encodage aussi du coup. ;-) Voir adapter les fonctions de traitement/lecture pour conserver le bon encodage.

Édité par viki53

Auteur du sujet

Et tes fichiers PHP sont bien tous encodés en UTF-8 sans BOM ?

Oui surement, j'ai toujours utilisé notepad++ avec UTF-8 sans BOM.

Bon une épine dans le pied en moins :p

Merci à tous et bonne continuation :)

Édité par alex4gous

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte