0

そのため、Ajax を介して HTML ページから PHP ページにデータを送信しようとしています。

それは私が使用しているjQueryコードの一部です:

$.ajax({
    url: "test.php",
    type: "POST",
    data: {
        name: "João"
    }
}).done(function (data) {
    alert(data);
})

ご覧のとおり、送信するパラメーターは「João」です。Ajax リクエストを作成する前に、バックグラウンドで jQuery がエンコードします。「João」は、二重エンコードされた UTF-8 である「Jo%C3%A3o」になります。

私の問題は、リクエストが送信され、PHP がバックグラウンドでデコードしようとしたときに発生します。$_POST を使用すると、PHP が自動的に 1 回だけデコードするため、"João" ではなく "João" になります。これは、PHP がすべての % を個別にデコードするために発生するため、%C3Ãになり、%A3£ になります。

utf8_decode() を介して手動でデコードしようとすると機能しますが、より良い解決策があるかどうかを知るためにここにいます。私が本当に必要としているのは、PHP がデータを正しくデコードする方法です。データが二重にエンコードされていても、三重にエンコードされていてもです。

4

1 に答える 1

2

これは二重エンコードではなく、正しい UTF-8 です。PHP は代わりにラテン 1 エンコーディングを想定しているようで、 UTF-8でない場合に同じバイトが何を意味するかを示しています。

この場合、文字が 0xFF 未満のように見えるため、PHP に UTF-8 を認識させる方法がわからない場合は、ラテン 1 で Jo%E3o として最初に URL エンコードすることもできます。

于 2013-02-16T23:04:49.233 に答える