私のブログ ソフトウェアLightBlogのブログ投稿作成ページでは、jQuery を使用して AJAX 経由でコンテンツを POST します。奇妙なことに、jQuery を介して漢字 (中文) を送信すると、UTF-16 でサーバーに送信されます。jQuery AJAX を無効にして Firefox を使用して POST すると、本来のように UTF-8 で送信されます。
Firebug をチェックインすると、jQuery はこれを送信します:%u4E2D%u6587
これは明らかに URL エンコードされた UTF-16 です。Firefox はこれを送信します:%E4%B8%AD%E6%96%87
これは間違いなく URL エンコードされた UTF-8 です。
jQuery は W3 仕様に従って UTF-8 で POST すると主張しているのに、なぜ UTF-16 で送信するのですか?
問題のjQueryコード:
$('#create').submit(function() {
var inputs = [];
$('.cf', this).each(function() {
inputs.push(this.name + '=' + escape(this.value));
})
jQuery.ajax({
data: inputs.join('&'),
type: "POST",
url: this.getAttribute('action'),
contentType: "application/x-www-form-urlencoded;charset=UTF-8",
timeout: 2000,
success: function(json) {
var r = jQuery.parseJSON(json);
alert(r.result);
}
})
return false;
})
関連する PHP コードが必要な場合は、if
このファイルの最初の状態にあります: http://code.google.com/p/lightblog/source/browse/trunk/Sources/ProcessAJAX.php?r=521