我在创建输入验证哈希时遇到问题。 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() 函数):
varvalidationHash=sha1(JSON.stringify({'name':'John Doe','city'=>'纽约'})+key);
当字符串包含 UTF-8 字符时,我的问题就出现了。例如,如果其中一个值是:
Ränisipelgasöösel
然后PHP服务器接收到该命令后将其转换为JSON编码后:
R\u00e4nisipelgas\u00f6\u00f6sel
我也需要在 JavaScript 中做到这一点,但我还没有弄清楚如何做。我需要确保向服务器发送正确的验证哈希,否则命令将失败。我从 Google 发现可以使用 unescape(encodeURIComponent(string)) 和decodeURIComponent(),但两者都没有给我提供与 PHP 相同的字符串并进行验证。
客户端和服务器端均使用UTF-8。
有任何想法吗?
我的修复方法是像这样对原始 url 编码我的 json 数据。
rawurlencode( json_encode( $data ) );
然后从 javascript 中解码原始 url 编码的 json,然后像这样解析 json 字符串。
JSON.parse( decodeURIComponent( data ) );
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)