2013-08-26 4 views
1

저는 PHP와 Javascript를 사용하여 일종의 웹 서비스를 구축하고 있습니다. JS에서 PHP로 보낸 게시 매개 변수로 계산 된 토큰의 유효성을 검사하려고합니다.PHP의 json_encode와 JS의 JSON.stringify

JS :

token = JSON.stringify(params); 

는 PHP : 두 개의 결과 JSON 문자열이 동일한 길이를 가지고 있지 않는 이유

token = json_encode($_POST); 

누군가가 설명해 주시겠습니까을의는 다음과 같은 코드가 있다고 가정 해 봅시다?

(나는 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에서는 그렇지 않은 정수가 있습니다. 데이터가 동일하다는 것을 검증 할 필요가 있고 값에 대해 신경 쓰지 않기 때문에 모든 큰 따옴표를 스트라이핑하고 트릭을 수행했습니다.