入力検証ハッシュの作成に問題があります。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 は、クライアントとサーバーの両方で使用されます。
何か案は?