[Ajax] transmission de données

Arkha -  
 Arkha -
Bonjour,
C'est toujours la même histoire, impossible de passer des caractères spéciaux ou accent avec Ajax, et pourtant j'ai tout essayé!, des fonctions d'encodage, différents types headers et de balise meta ISO et UTF-8, mais rien y fait! il ne veut jamais passer mes accents...

//Javascript
function svg(id) {
  var val = document.getElementById(id).value;
  val = encodeURI(val);
  var data = id+"="+val;
  var xhr = getXhr();
  xhr.onreadystatechange = function(){
	 //On ne fait quelque chose que si on a tout reçu et que le serveur est ok
	 if(xhr.readyState == 4 && xhr.status == 200){
	   alert (xhr.responseText);
	 }
	}
  xhr.open("POST", "request/saving.php", true); 
  xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  xhr.send(data); 
}

//php en partie, $val correspond à la valeur du $_POST
$val = rawurlencode($val);
//même en essayant n'importe quels autres encodages de ce type rien y fait
$query = "INSERT INTO donnee VALUES ('$d',$h,$m,'$val')";
mysql_query($query);

Quelque soit la méthode employé lorsque je veux sauvegarder un "é", la base de données le sauvegarde de la façon "%E3%A9" au lieu de "%C3%A9".
J'ai également essayé des fonctions de type "htmlentities" en php mais là encore sans succès... Je finis toujours avec des "ã©" ou "ã©" dans la base...

Je suis sur que c'est tout bête, mais pour le moment ça me bloque vraiment :)

Merci à celui qui saura m'aider.
A voir également:

6 réponses

nEm3sis Messages postés 722 Statut Membre 113
 
le problème se situe a quel moment ?
pendant la transmission ajax ? (navigateur -> serveur)
ou pendant l'enregistrement sql (serveur -> sql)
0
Arkha
 
Lors de la transmission ajax avec encodeURI si je place un alert de val juste en dessous, il est affiché avec le bon encodage.

Par contre coté traitement PHP la valeur sauvegardée dans la base de donnée est:

- si je ne traite pas l'information (aucun encodage nul part), la valeur dans la base est "ã©" .

- "%E3%A9" si j'utilise urldecode() sans utiliser d'encodage coté AJAX .

- si j'utilise un encodage coté AJAX, je n'ai pas de réponse avec reponseText si j'utilise urldecode() coté php, la valeur est tout de même sauvgardée dans la base sous la forme "%E3%A9".

- si j'utilise un encodage coté AJAX, j'ai une réponse avec reponseText si j'utilise urlencode() coté php, la réponse et la valeur sauvegardé dans la base est encore une fois "%E3%A9".


Je suppose donc que ça surviens lors de l'enregistrement sql même je n'en suis pas vraiment sûr...
0
Arkha
 
Egalement,

En utilisant une fonction javascript qui fait le même effet que Htmlentities pour remplacer les caractères concernés, je n'ai aucune donnée transmise lors du traitement en PHP...
0
Arkha
 
Personne ne peut donc m'éclairer? :)
0

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

Posez votre question
resalut Messages postés 784 Date d'inscription   Statut Membre Dernière intervention   55
 
sinon transforme les caracteres speciaux par un genre de code et tu fé des str_replace (un peu barbare mais bon ca devrait fonctionner)
0
Arkha
 
Problème résolu avec l'utilisation de la fonction javascript "escape" lors du l'enregistrement des données et de la fonction php "utf8_encode()" lors du traitement des données (récupération uniquement) via php =)
//code JAVASCRIPT
function svg(id) {
  var val = document.getElementById(id).value;
  val = escape(val);
  alert (val);
  var data = id+"="+val;
  var xhr = getXhr();
  xhr.onreadystatechange = function(){
	 if(xhr.readyState == 4 && xhr.status == 200){
	   alert (xhr.responseText);
	 }
	}
  xhr.open("POST", "request/saving.php", true); 
  xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  xhr.send(data); 
}

//code PHP
if (mysql_num_rows($result) == 1) {
      echo utf8_encode(mysql_result($result,0));
}
0