2

入力検証ハッシュの作成に問題があります。JavaScript はデータを API に送信し、API は送信されたデータを json_encode で検証します。基本的には次のように機能します。

$input=array('name'='John Doe','city'=>'New York');
$validationHash=sha1(json_encode($input).$key); // Key is known to both servers

PHP が別のサーバーに接続すると、すべてが機能します。JavaScript でも動作します (カスタムの sha1() 関数もあります)。

var validationHash=sha1(JSON.stringify({'name':'John Doe','city'=>'New York'})+key);

私の問題は、文字列に UTF-8 文字が含まれている場合に発生します。たとえば、値の 1 つが次の場合:

Ränisipelgasöösel

次に、コマンドを受信した PHP サーバーは、JSON エンコーディング後にコマンドを次のように変換します。

R\u00e4nisipelgas\u00f6\u00f6sel

JavaScriptでもこれを行う必要がありますが、方法がわかりません。適切な検証ハッシュをサーバーに送信するか、コマンドが失敗するかを確認する必要があります。Google から unescape(encodeURIComponent(string)) と decodeURIComponent() を使用できることがわかりましたが、どちらも PHP が持っていて検証するのと同じ文字列を与えてくれません。

UTF-8 は、クライアントとサーバーの両方で使用されます。

何か案は?

4

4 に答える 4

2

できないようです。私が見つけた唯一の実用的な解決策は、ブラウザー側で encodeURIComponent() を使用して、PHP 側で rawurlencode() を使用してすべてのデータをエンコードし、配列内のこれらの値から JSON を計算することです。

于 2012-04-13T17:02:41.087 に答える
-1

安全な転送のためにデータをbase64でエンコードしないのはなぜですか? UTF-8 文字を安全な文字列にエンコードし、さまざまなメディア (php、javascript など) で送信できます。これにより、受信側で文字列を base64 でデコードできます。出来上がり!

データをbase64でエンコードするということは、json文字列全体ではなく値をbase64でエンコードすることを意味します

于 2012-04-13T14:40:53.960 に答える
-2

あなたはutf-8をエンコードするhtmlページですか?

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

于 2012-04-13T14:06:01.727 に答える