2

JavaScriptからPHPに文字列を送信できるようにする必要があるアプリケーションに取り組んでいます。最初は変数を介して送信したばかり$_POSTでしたが、文字列に値が挿入されていることに気付きました。

次に、データが送信中に破壊されていると想定したため、base64を使用してデータを送信するように両方の部分を再コーディングしました。文字列は間違いなく問題なく転送されていましたが、ベース64からベース16に戻すと、以前とまったく同じ間違いが発生しました。

2つの文字列(16進ダンプ)の比較を次に示します。各文字列には2つの意味のあるデータのチャンクがあり、PHPはそれらの領域の近くでのみ間違いを犯しているようです。最初の行はPHPが文字列を解釈する方法であり、2番目の行はJavaScriptから文字列を送信する方法です。

c2 b0 c2 a7 c3 9a 7a 00 00 00 c2 bb 30 4d 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b0 a7 da 7a 00 00 00 00 00 00 bb 30 4d 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

これらのファントムバイトが表示されるのはなぜですか?

編集:これが私が使用しているコードです。

JavaScript:

function sendRequest(body)
{
    var url = "../update/index.php";
    $.post(url,{msg:body},function(data,status,jqx)
    {
        $("#response").html(data);
    });
}

bodyは、先頭が。としてハードコードされている文字列です"\u00b0\u00a7\u00da\u007a"

次にPHPで:

$msg =$_POST['msg'];
plain_hex_dump($msg);

plain_hex_dump文字列を16進数として出力するだけで、上記の2つの16進数ダンプの最初の結果になります。

4

1 に答える 1

3

これは UTF-8 エンコーディングです。

b0としてエンコードされc2 b0ます。a7になりc2 a7ます。daになりc3 9aます。7aは変更されません。

したがって、あなたb0 a7 da 7aは UTF-8 で として表されますc2 b0 c2 a7 c3 9a 7a

bodyJavascript が変数を UTF-8 でエンコードしているようです。PHPでutf8_decode 関数を使用してみてください。

于 2012-05-09T18:06:36.880 に答える