2013-08-26 4 views
1

Я использую PHP и Javascript для создания своего рода веб-службы. Я пытаюсь проверить маркер, рассчитанный по параметрам сообщения, отправленным с JS на PHP. Скажем, код выглядит следующим образом:PHP json_encode и JS's JSON.stringify

JS:

token = JSON.stringify(params); 

PHP:

token = json_encode($_POST); 

Может кто-нибудь, пожалуйста, объясните мне, почему получившиеся строки JSON не имеют одинаковую длину?

(Я пытался обрезать \n\r\t в PHP, stripslashes в PHP, несколько JS libs). В PHP-версии строки всегда есть еще несколько символов.

+3

Можете ли вы опубликовать содержимое обеих строк json? –

+2

'' и '' \ x61 "' одинаковы, но оба имеют разные символы/длину. –

+0

Вы уверены, что параметры и $ _POST одинаковы? То, что вы утверждаете, не может быть действительным, JSON должен давать точный результат независимо от того, на каком языке вы находитесь ... проверьте, что обе строки идентичны, т. Е. Один может содержать \ t, а другой - не что-то. .. –

ответ

5

В JavaScript действует ключ JSON без котировки. В PHP ключ JSON без котировки НЕдействителен. (На самом деле, правильный синтаксис JSON с кавычками на клавишах.)

Итак, вы правы, разница была от JSON.stringify, которые разделяют кавычки от вашего целочисленного ключа.

+1

№. В JavaScript имя объекта литерала объекта может быть идентификатором, который не нужно указывать. Однако (1) Идентификаторы не могут быть целыми, поэтому они должны быть кавычками и (2) при создании JSON правила JSON по-прежнему применяются, поэтому все имена свойств должны быть строками и не могут быть идентификаторами. – Quentin

0

На самом деле, у меня было целое число, которое было заключено в двойные кавычки в PHP, но не в JS. Поскольку мне нужно только проверить, что данные одинаковы, и меня не интересуют ценности, я разделил все двойные кавычки, и это сделало трюк.