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