2012-03-23 17 views
1

JavaScriptでAJAXリクエストを実行し、jQueryライブラリを使用しています。ここ
は、AJAX要求を実行し、私のコマンドです:jQuery ajax + responseText +文字エンコーディング

$.ajax({ 
    async: "false", 
    cache: "false", 
    data: {login: strLogin, password: strPassword}, 
    datatype: "text", 
    error: connexionAjaxError, 
    success: connexionAjaxSuccess, 
    type: "POST", 
    url: "./Connexion" 
}); 

".Connexionは、" 私のPHPスクリプトへのURLのリダイレクトです。
connexionAjaxErrorは、HTTP応答を受信するとすぐに実行されるJavaScript関数です。
理由:ここで

header("HTTP/1.0 500 Internal Server Error; 
     Content-type: text/plain; 
     charset=ISO-8859-1"); 

echo "été"; 

はconnexionAjaxErrorの署名である:私のPHPスクリプトは、ここ500
に等しいHTTPステータスコードとtext/plainのページには、私のPHPスクリプトの最も関連性の高い部分であるに結果コールバック関数:

function connexionAjaxError(jqXHR, textStatus, errorThrown) 

PHPの結果は "été"という文字列になります。
PHPの内部エンコーディングはISO-8859-1です。結果の文字列は[e9 74 e9]に16進表記でエンコードされています。

ただし、connexionAjaxErrorコールバック関数のjqXHR.responseTextには1文字の文字列が含まれています。
JavaScript文字列オブジェクトのcharCodeAtメソッドを使用して、文字のUnicode(UTF-8?)コードを取得しました。
文字は、16進表記で[ff ff]に相当する10進表記で65535でエンコードされています。

jqXHR.responseTextに3文字の文字列 "été"が含まれていない理由を理解できません。
私はJavaScriptの専門家ではありませんが、jqXHR.responseTextにはUTF-8でエンコードされた文字列しか含まれていないと思います。
jqXHR.responseTextの文字列 "été"は、[c3a9 74 c3a9]に16進表記でエンコードされます。
私は、次のWebサイトから文字「E」のためのUTF-8コード取得があります:http://www.utf8-chartable.de/

答えて

1

私はスペイン語で、開発の多くを作り、私はすでにこのを通じて行ってきたので、私は、あなたを助けるかもしれないいくつかのことを気づいた:

ヘッダ関数の文字セットがUTF-8でなければなりません。

FILE自体(PHPスクリプト)はUTF-8で保存する必要があります。メモ帳++でファイルを編集し、BOMなしでUTF-8になるようにエンコーディングを選択すると簡単にこれを達成できます。

同じことがjavascriptファイルとHTMLファイルの場合は、ANSIではなくBOMのないUTF-8でエンコードする必要があります。

私に教えてください!

+0

あなたの答えをありがとう。今、私はJS/PHPのlitteral文字列がどのようにコード化されているかについて、より良いアイデアを得ました。私のPHP/JSスクリプトにISO-8859-1エンコーディングが適用されている場合、litteral文字列 "été"は16進表記でエンコードされます[e9]。しかし、PHP/JSスクリプトにUTF-8エンコーディングが適用された場合、litteral文字列 "été"は16進表記で[c3 a9]にエンコードされます。私が間違っているかどうか教えてください。 – user1139666

0

はあなたの呼び出しでこのようCONTENTTYPEを設定しようと、私の知る限りではjQueryのAjaxは常にUTF-8であります指定されていない場合。

$.ajax({ 
... 
    datatype: "text", 
    contentType: "application/x-www-form-urlencoded;charset=ISO-8859-1", 
    error: connexionAjaxError, 
    success: connexionAjaxSuccess, 
    type: "POST", 
... 
}); 

編集: 私の答えは参考になっていない場合、それはあなたがサーバの文字セットの設定を確認した場合に役立ち、また、それを投稿することがあります。

+0

jQueryのドキュメントhttp://api.jquery.com/jQuery.ajax/ のcontentType設定は、サーバーに送信されるデータにのみ適用されます。 しかし、私の問題はサーバーから受信したデータに関係しています。 PHPスクリプトの1つでmb_internal_encoding関数を実行しました。 mb_internal_encoding関数が "ISO-8859-1"を返しました。 結果: [1]結果文字列 "été"は[e9 74 e9]に16進表記でエンコードされています。 [2] HTTP応答のヘッダーに "charset = IS0-8859-1"を指定しました。 – user1139666

関連する問題