Jquery: ajax post et l'encodage

Je ne comprends pas pourquoi je ne peux pas obtenir un charstet ISO-8859-1 correct à partir de la réponse du serveur. Comme il s'agit d'un travail sur le code d'héritage, je pouvais à peine changer l'encodage du jeu de caractères sur les pages.

j'utilise L'appel JQuery

$.post("server-side-code", {t:ctext, i:ioff, sid:sessionid},  
    function(data, status) {            
       $('#chk').append(data); 
     });

affichage d'une valeur textarea créé en utilisant javascript:

<form accept-charset='ISO-8859-1' method='post'>
<textarea cols='40' rows='8' id='commento'></textarea><br>
<input type='button' value='invia' id='submit'></form>

le script côté serveur traitant la requête déclare à son sommet:

text/html; charset=ISO-8859-1

donc, honnêtement, je ne peux pas comprendre ce que je devrais déclarer d'autre, en termes d'encodage. Ceci nonobstant, les caractères accentués "àèéìòù" rebondir comme: "à ÃéÃÃ2Ã1" en plaçant la réponse du serveur dans un élément HTML

la source est sauvegardée en ascii. Tryng faire pour avoir rudimentaire Html de codage de la variable à être publiés ne pas résoudre:

ctext = escapeHTML(ctext);

function escapeHTML (str)
{
   var div = document.createElement('div');
   var text = document.createTextNode(str);
   div.appendChild(text);
   return div.innerHTML;
}; 

une idée?

Merci!

9
demandé sur Richard Schneider 2009-06-08 18:24:14

9 réponses

j'ai une meilleure solution maintenant. Les deux post et get fonctionne parfaitement. Je travaille sur tomcat qui par défaut gère les trucs ISO 8859.

propriétés de la page Web:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

jeu de caractères de la page Web à l'intérieur de la tête.

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

maintenant, tous mes paramètres sont échappés avec la fonction escape, j'ai fourni cette solution avant.

(function($) {$.fn.escape = function() {
    return escape(this.val());};})(jQuery);

maintenant, lors de l'envoi de la demande ajax j'ai contentType:

contentType : "application/x-www-form-urlencoded; charset=iso-8859-1"

et finalement , lorsque je reçois les paramètres au niveau du servlet ou de n'importe quel récepteur, j'obtiens un paramètre décodé en utilisant ceci.

    public String getHttpParameter(String name) throws Exception {
    String value = this.getHttpRequest().getParameter(name);
    return value == null || value.isEmpty() ? value : URLDecoder.decode(value,"ISO-8859-1");
}

POST et obtenir fonctionne parfaitement dans IE 7 et 8, SAFARI, CHROME et FIREFOX.

5
répondu Rodrigo Asensio 2009-08-04 17:58:08

j'ai utilisé ce qui suit en javascript

escape($("#some_id").val()) 

et les suivants en PHP

urldecode($var)

ça a marché pour moi.

2
répondu Ciro 2012-10-05 01:20:18

pas sûr que ce soit ce qui casse votre situation, mais accept-charset est extrêmement mal supporté, et vous pouvez aussi bien ne pas l'utiliser. C'est l'encodage de la page qui va contrôler ce qui est renvoyé au serveur.

ce serait utile si vous regardiez les fichiers sauvegardés sur votre serveur pour voir si les données qu'ils contiennent sont bonnes ou pas. Cela permettrait au moins d'établir si la partie client->serveur de la transaction fonctionne.

1
répondu chaos 2009-06-08 14:42:20

veuillez essayer d'utiliser escape () dans javascript et urldecode () dans le fichier php

ça va marcher.

1
répondu Hardik Soni 2010-11-11 09:06:00

autant que je sache, jQuery utilise l'encodage de la page Web qui invoque la méthode AJAX pour interpréter les données reçues. Utilisez-vous le bon encodage pour la page? Si oui, l'erreur se trouve probablement dans le code du serveur. Essayez D'appeler le gestionnaire AJAX par programmation (en dehors du navigateur Web) pour voir ce qu'il renvoie.

0
répondu kgiannakakis 2009-06-08 14:36:22

Informations générales: http://www.w3.org/International/O-HTTP-charset

essayez de convertir la chaîne utf-8 avec utf8_decode() en php avec les données incomming et sortantes.

0
répondu 2009-07-02 13:16:55

toutes mes pages sont ISO-8859-1, ma réponse est aussi 8859 mais jQuery ajax me faisait peur. Ma solution était d'emballer les premiers dollars.ajax fonctionnalité avec cela. Fonctionne parfaitement pour GET request, Et je posterai bientôt la solution pour POST request.

l'appel:

$.myrequest({
  url: "/myapp/myurl",
  params: {
    key1: $("#myinput").escape()
  }
});

la source pour échapper à la fonction

(function($) {
$.fn.escape = function() {
    return escape(this.val());
};})(jQuery);

la source de la fonction myrequest

(function($) {

$.request = function(settings) {

    /**
     * generates a string that will be passed as 
     * data instead an object, but we have the capability
     * of pass an object but in another variable called param
     */
    function _parseParameters(settings) {
        var data = "";
        for (var param in settings.params) {
            data += param + "=" + settings.params[param] + "&";
        }
        settings.data = data;
    }
    _parseParameters(settings);
    $.ajax(settings);
}})(jQuery);
0
répondu Rodrigo Asensio 2009-08-04 13:47:42

j'ai cherché haut et bas pour un problème similaire (Windows-1250 demande avec AJAX). J'ai trouvé une solution et posté ici: Comment peut-on encoder des variables de requête par encodeURIComponent avec un jeu de caractères ISO-8859-1 et non utf-8?

0
répondu Nux 2017-05-23 10:30:08

peut-être avez-vous oublié de déclarer le type de contenu du côté du serveur avant de le spécifier comme UTF-8, dans ce cas, le type de contenu est null et le serveur ne sait pas quel type de données il traite. Une fois que vous déclarez le contentType comme UTF-8, le serveur est capable de comprendre quel type de données fonctionne. Déclarer le type de contenu comme UTF-8 n'est pas la bonne solution, bien qu'elle aide. La réponse fournie par Rodrigo serait probablement la meilleure solution pour votre problème.

0
répondu Josue 2013-07-25 05:12:57