1

私のブログ ソフトウェア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

4

2 に答える 2

3

から UTF-16 が返されescape(this.value)ますが、jQuery とは関係ありません。

escape("中文")コンソールで実行してみてください。

encodeURIComponent()期待どおりの文字列を生成するように見えるもの ("%E4%B8%AD%E6%96%87") を使用する必要があります。

また

文字列ではなくハッシュとしてデータを渡すことで、jQuery にすべてのエンコード部分を実行させます。

... また

データを手動で作成する代わりに、$(".cf").serialize()または$(".cf").serializeArray()を使用して POST 文字列/データ配列を取得してみてください。

于 2012-06-19T07:35:59.200 に答える
0

コンテンツタイプをに設定してみてくださいUTF-8

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
于 2012-06-19T02:20:51.023 に答える