ISO-8859-1を使用するWebサイトで動作するChrome拡張機能を作成しています。コンテキストを説明するために、私の拡張機能は、より便利な投稿フォームを追加することで、サイトのフォーラムへの投稿をより速くすることです。次に、メッセージが書き込まれるtextareaの値が、(jQueryを使用して)Ajax呼び出しを介して送信されます。
メッセージに次のようなá
文字が含まれている場合、これらの文字は投稿されたメッセージに×として表示されます。ブラウザにISO-8859-1ではなくUTF-8を表示させると、á
正しく表示されます。
Javascriptは文字列にUTF-8を使用していることを理解しているので、送信する前に文字列をISO-8859-1にトランスコードすると、問題が解決するはずです。ただし、Javascriptでこのトランスコーディングを行う直接的な方法はないようで、サーバー側のコードに触れることはできません。何かアドバイス?
作成したフォームを次のようにiso-8859-1を使用するように設定してみました。
var form = document.createElement("form");
form.enctype = "application/x-www-form-urlencoded; charset=ISO-8859-1";
そしてまた:
var form = document.createElement("form");
form.encoding = "ISO-8859-1";
しかし、それはうまくいかないようです。
編集:
問題は、jQueryがメッセージ(または途中で何か)をどのようにエンコードしているかに実際にありました。次のスニペットに示すように、データを処理しないようにjQueryに指示し、自分で実行することでこれを修正しました。
function cfaqs_post_message(msg) {
var url = cfaqs_build_post_url();
msg = escape(msg).replace(/\+/g, "%2B");
$.ajax({
type: "POST",
url: url,
processData: false,
data: "message=" + msg + "&post=Preview Message",
success: function(html) {
// ...
},
dataType: "html",
contentType: "application/x-www-form-urlencoded"
});
}