2009-06-08 12 views
9

サーバーの回答から正しいISO-8859-1文字セットを取得できない理由を理解できません。これは従来のコードの作業であるため、ページ上の文字セットのエンコーディングを変更することはほとんどありませんでした。Jquery:Ajaxのポストとエンコーディング

私はjQueryのコール

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

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> 

が要求を処理するサーバー側のスクリプトはその最上部に宣言しています。

text/html; charset=ISO-8859-1 

そう、正直言って、宣言すべきことをエンコードのこれにもかかわらず、アクセント記号付きの文字「àèéìòù」は、HTML要素にサーバーの回答を配置するときに「ÃèéÃÃÃÃÃÃù」と表示されます。

ソースはASCII形式で保存されます。掲載されるように、変数に基本的なHTMLのエンコーディングを持っているために、これを行うにはTryngは解決しません:

ctext = escapeHTML(ctext); 

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

いくつかのアイデアを?

ありがとうございます!

+0

まあ...これはクレイジーです。信じられない。この問題は、AJAX要求に対する答えを返すサーバー側のページをUTF-8で宣言して解決されています。つまり、ajaxリクエストを作成しているページで使用されている文字セットとは異なる形式のcharsetを宣言します。 – Daniel

答えて

5

のソース、私は今、よりよい解決策を持っています。ポストとゲットの両方が完璧に機能します。 私はデフォルトでISO 8859のものを扱うTomcatに取り組んでいます。

Webページのプロパティ:ヘッド内部のWebページの

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

文字セット。今

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

、すべての私のparameteresは私が前にこのソリューションを提供し、エスケープ関数でエスケープされています。サーブレットまたは任意の受信機でパラメータを受信したときに

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

そして最後には、私はこれを使用して復号化されたパラメータを取得します:AJAXリクエストを送信する際に

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

は今、私はこれまでのcontentTypeを設定します。

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とGETは、IE 7と8、SAFARI、CHROME、FIREFOXで完全に機能します。

+0

を使用しています。 URLDecoder.decodeが例外を起動します(不正な引数 - 不完全な末尾エスケープ(%)パターン)。 –

0

私の知る限り、jQueryは、受信したデータを解釈するためにAJAXメソッドを呼び出すWebページのエンコーディングを使用しています。ページの正しいエンコードを使用していますか?はいの場合、エラーはおそらくサーバーコードにあります。 AJAXハンドラをプログラムで(Webブラウザの外で)呼び出して、何が返されているかを確認してください。

+0

私はこのソリューションで Daniel

1

あなたの状況を壊しているかどうかは分かりませんが、accept-charsetは非常によくサポートされていませんし、使用していないこともあります。これは、サーバーに返される内容を制御するページエンコーディングです。

サーバー上の保存されたファイルを調べて、その中のデータが良好かどうかを確認すると便利です。それは少なくとも、トランザクションのクライアント - >サーバー部分が動作しているかどうかを確認するでしょう。

0

私のすべてのページはISO-8859-1ですが、私の回答も8859ですが、jquery ajaxが私を驚かせてくれました。私の解決策は、これを元の$ .ajaxの機能に置き換えました。 Works完璧にGET要求のため、私はすぐにPOST要求のためのソリューションを投稿します。

コール:

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

エスケープ関数のソース

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

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); 
1

それが動作するPHPファイルにJavaScriptとurldecode()でエスケープ()を使用してみてください。

2

私はそれは私のために働いPHP

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

と、次のJavaScriptで

urldecode($var) 

を次のように使用してきました。

0

UTF-8として指定する前に、サーバー側でcontentTypeを宣言するのを忘れたかもしれません。この場合、contentTypeはnullであり、サーバーはどのデータを処理しているのかわかりません。 contentTypeをUTF-8として宣言すると、サーバはどの種類のデータと連携しているのかを理解することができます。 contentTypeをUTF-8として宣言することは正しい解決策ではありませんが、役立ちます。 Rodrigoが提供する答えはおそらくあなたの問題のための最良の解決策になるでしょう。

関連する問題