2013-08-26 39 views
1

我使用PHP和Javascript来构建某种Web服务。我尝试验证从JS发送到PHP的post参数上计算的令牌。比方说,代码如下:PHP的json_encode和JS的JSON.stringify

JS:

token = JSON.stringify(params); 

PHP:

token = json_encode($_POST); 

有人可以请解释一下我为什么两个结果JSON字符串不具有相同的长度?我试图修剪PHP中的\n\r\t,PHP中的stripslashes,几个JS库)字符串的PHP版本总是有更多的字符。

+3

你可以发布两个json字符串的内容吗? –

+2

''a“'和'”\ x61“'是相同的,但都有不同的字符/长度。 –

+0

你确定params和$ _POST是一样的吗?无论您声称的是什么语言,JSON都应该提供完全相同的输出结果,请检查两个字符串是否相同,即其中一个可能包含\ t,另一个不是那种类型。 .. –

回答

5

在JavaScript中,不带引号的JSON密钥是有效的。在PHP中,没有引号的JSON密钥无效。 (实际上,正确的JSON语法是用引号括起来的。)

所以你是对的,区别来自JSON.stringify谁从你的整数键去掉引号。

+1

不。在JavaScript中,对象字面值属性名称可以是标识符,不需要引用它。但是(1)标识符不能是整数,所以它们必须被引用,(2)在生成JSON时,JSON规则仍然适用,因此所有属性名称必须是字符串,并且不能是标识符。 – Quentin

0

其实,我有一个整数在PHP中的双引号而不是在JS中。由于我只需要验证数据是否相同,并且我不关心这些值,所以我将所有双引号分开,并且它实现了诀窍。