Aller au contenu

XmlHttpRequest + Charset


DavidR76

Sujets conseillés

Bonjour,

Après avoir cherché sur le web (et sur ce forum) je vous expose mon problème :

J'utilise xhr dans un formulaire pour mettre à jour des champs de ce formulaire via MYSQL 4.1.9-max.

Le charset de ma page html est en iso-8859-1

L'interclassement de ma base, de ma table et de mes champs est latin1_general_ci.

J'ai également setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=iso-8859-1'); de défini,

et overrideMimeType('text/html; charset=ISO-8859-1');

Mon fichier php appelé par xhr ne contient pas de header("Content-type: text/html; charset=iso-8859-1"); puisque j'utilise setRequestHeader et overrideMimeType (mais peut etre que je me trompe).

Et malgré tout celà, le texte inséré dans ma table mysql contient des caractères genre é au lieu d'un é.

Je comprends plus rien merci de me venir en aide.

Je joints l'entete HTTP et mon code :

Date: Wed, 08 Nov 2006 08:18:12 GMT

Server: Apache/1.3.33 (Win32) PHP/4.3.10

X-Powered-By: PHP/4.3.10

Keep-Alive: timeout=15, max=96

Connection: Keep-Alive

Transfer-Encoding: chunked

Content-Type: text/html; charset=iso-8859-1

Code contenu dans mon fichier html :

var xhr_mysql = null;

if(window.XMLHttpRequest) // Firefox

xhr_mysql = new XMLHttpRequest();

else if(window.ActiveXObject) // Internet Explorer

xhr_mysql = new ActiveXObject("Microsoft.XMLHTTP");

else { // XMLHttpRequest non supporté par le navigateur

alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");

return;

}

xhr_mysql.open("POST", "../fonctions/valid_modele_request.php", true);

xhr_mysql.overrideMimeType('text/html; charset=ISO-8859-1');

xhr_mysql.onreadystatechange = function() {

if(xhr_mysql.readyState == 4)

{

var message = xhr_object.getAllResponseHeaders();

document.modele.Corps.value = message

alert('Votre modèle a bien été enregistré.');

//window.location.href = "../index.php";

}

}

xhr_mysql.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=iso-8859-1');

var data = "id_modif="+id_modif+"&id_operateur="+id_operateur+"&id_essai="+id_essai+"&nom="+nom+"&sujet="+sujet+"&Chaine_Pour="+Chaine_Pour+"&Chaine_Copie="+Chaine_Copie+"&corps="+corps;

xhr_mysql.send(data);

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Déjà tu devrais rajouter le header qui renvoit le type mime pour tes pages PHP. Mais ça n'est pas ça qui peut poser problème lors de l'insertion dans ta base... Vérifie peut-être le format d'encodage de tes fichiers par ton éditeur de texte :unsure:

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines plus tard...
  • 4 semaines plus tard...

Bonjour,

j'ai eu le même problème avec une aplication et j'ai trouvé une solution.

En effet lorsque le javascript appelle un fichier PHP en Ajax, la sortie est mal encodé.

La solution est de convertir cette sortie.

Exemple de fichier PHP appelé par XmlHttpRequest:

/*
BUFFERISATION DE SORTIE:
Je buffeurise la sortie pour éviter le problème d'encodage
*/
ob_start();

/* SCRIPT EN PHP ....... */

/*ON STOPPE LA BUFFERISATION DE SORTIE*/
$buffer = ob_get_clean();

/*ON CONVERTIE LA SORTIE*/
$buffer = mb_convert_encoding($buffer,"UTF-8", "auto");

/*ON AFFICHE LA SORTIE*/
echo $buffer;

Voilà, bonne journée

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines plus tard...

Une autre solution possible à mon avis : la fonction utf8_decode

Il suffirait probablement de l'appliquer aux données juste avant l'enregistrement dans la base de données :)

Modifié par ZeBrian
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...