web-dev-qa-db-fra.com

JQuery AJAX n’envoie pas UTF-8 à mon serveur, mais uniquement IE

J'envoie du texte japonais UTF-8 à mon serveur . Il fonctionne sous Firefox. Mon access.log et mes en-têtes sont:

/ajax/?q=%E6%BC%A2%E5%AD%97
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Content-Type    application/x-www-form-urlencoded; charset=UTF-8

Howeer, dans IE8, mon access.log dit:

/ajax/?q=??

Pour une raison quelconque, IE8 transforme mon appel AJAX en point d'interrogation. Pourquoi!? J'ai ajouté le scriptCharset et le ContentType selon certains tutoriels, mais toujours pas de chance.

Et voici mon code:

$.ajax({
    method:"get",
    url:"/ajax/",
    scriptCharset: "utf-8" ,
    contentType: "application/x-www-form-urlencoded; charset=UTF-8",
    data:"q="+query ...,
    ...
    })
24
TIMEX

Essayez d’encoder le paramètre de requête avec encodeURIComponent()

data:"q="+encodeURIComponent( query )

comme Bobince l'a très bien noté dans son commentaire, si vous utilisez la notation objet pour passer des paramètres à la méthode ajax, elle gérera le codage lui-même.

alors 

data:{ q : query }

jQuery va gérer l'encodage ..

55
Gabriele Petrioli

Nous avons lu ce post en espérant que cela résoudrait le problème que j'avais rencontré et qui concernait les conversions utf8.

Dans mon cas, il s’est avéré que le moteur du serveur (node.js) calculait la longueur de contenu des données avec les données considérées comme étant brutes et non utf8; ainsi, les caractères étendus dans uft8 étaient calculés comme s’ils produisaient un caractère. dans le serveur envoyant un caractère trop peu.

Voyez ce que j'ai fait pour le résoudre ici: Json pas bien formé lors de l'envoi à CouchDB

2
javabeangrinder

Je sais que c’est un ancien message, mais j’ai eu ce problème récemment et j’aimerais apporter ma contribution au cas où une autre personne aurait le même problème . J'utilise PHP = mais je suis sûr qu’il existe une option sur chaque langue côté serveur. C'était juste une ou deux choses:

  1. Assurez-vous d'envoyer les bons en-têtes sur votre réponse ajax en ajoutant un en-tête ('Content-Type: text/html; charset = utf-8'); Ce doit être votre première ligne. Si vous avez des erreurs indiquant que les en-têtes ont déjà été envoyés ou quelque chose du genre, c'est parce que quelque part dans votre code, vous créez un espace supplémentaire ou quelque chose avant l'envoi de l'en-tête, vérifiez votre code.

  2. Lorsque vous créez votre réponse sur votre serveur, assurez-vous de convertir tous vos caractères en caractères HTML correspondants en utilisant echo htmlentities ($ your-string, null, 'utf-8); Parce que même après avoir dit IE que vous envoyez des données en utf-8, il semble que IE oublie cela ou ne suppose simplement rien, donc l'ajout à votre code assurera le droit sortie.

Merci à tous pour votre aide.

1
Alfonso

Utilisez encodeURIComponent() en javaScript. Voici l'échantillon:

function doPost()
{
    var URL = "http://localhost/check.php?yab=" + encodeURIComponent(document.getElementById("formSearch").childNodes[1].value);
    xmlHttp.open("GET", URL);
    xmlHttp.send();
};
0
ali.b.y