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 字符时,我的问题就出现了。例如,如果其中一个值为:

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 回答
2

我的解决方法是像这样对我的 json 数据进行原始 url 编码。

rawurlencode( json_encode( $data ) );

然后从javascript中解码原始url编码的json,然后像这样解析json字符串。

JSON.parse( decodeURIComponent( data ) );

希望这可以帮助。

于 2018-02-27T21:35:56.757 回答
-1

为什么不对数据进行 base64 编码以便安全传输?它将 UTF-8 字符编码为一个安全的字符串,可以通过不同的媒体(php、javascript 等)发送。这样你就可以在接收端对字符串进行 base64 解码。瞧!

通过base64编码数据,我的意思是base64编码值而不是整个json字符串

于 2012-04-13T14:40:53.960 回答
-2

你是 html 页面编码 utf-8 吗?

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

于 2012-04-13T14:06:01.727 回答