2009-11-24 6 views
4

PHP (5.3.1)에서 웹 서비스 (Python으로)에 JSON 문자열을 보내야하는 프로젝트에서 작업하고 있지만 json_encode에서 얻은 결과가 유효한 것으로 전달되지 않습니다. JSON (유효성을 검사하기 위해 JSLint를 사용하고 있습니다).잘못된 PHP JSON 인코딩

내가 인코딩하려고하는 구조가 상당히 크고 (13K로 인코딩 됨) 부분적으로 UTF8 데이터로 이루어져 있고 json_encode가 처리하는 동안 결과에서 이상한 장소에 공백이 있다는 것을 추가해야합니다. 예를 들어 JSON이 유효하지 않기 때문에 (또는 두 번째 예와 같이 데이터) 웹 서비스에서 오류가 발생하는 {hello : tru e} 또는 { "hell o": true}를 얻을 수 있습니다.

또한 JSON 인코딩을 위해 Zend 프레임 워크를 사용해 보았지만 많이 다르지 않았습니다.

PHP의 JSON과 관련된 알려진 문제점이 있습니까? 누구든지 그 행동에 직면하고 해결책을 찾았습니까?

답변

3
내가 다른 일 일부 자동으로 생성 된 이메일을 처리하고 (공간은 이메일 본문에 삽입 된) 같은 이상한 행동을 발견했다

는, 그래서 이메일 게시물을 확인하기 시작하고 범인을 발견 : 메일에서

을 RFC2821 :

는 IS (투명성 중복 선두 점은 제외) 1000 개 문자를 포함한 텍스트 라인의 최대 총 길이.

내 이메일 본문이 실제로 한 줄에 있기 때문에 \ n의 수정으로 공백 문제가 해결되었습니다.

6

개체 키에 공백이나 유니 코드가 아닌 문자를 포함 할 수 없으므로 따옴표로 묶지 않은 변수는 부울, 정수, 부동 소수점, 개체 및 배열 값일 수 있으며 문자열은 항상 인용 부호로 묶어야합니다.

또한 json 출력 전에 올바른 헤더를 추가하는 것이 좋습니다.

if(!headers_sent()) 
    header('Content-Type: application/json; charset=utf-8', true,200); 

json_encode으로 전달하는 배열이나 개체를 게시 할 수 있습니까?

6

당신은 "인코딩하려고하는 구조는 부분적으로 UTF8 데이터로 구성되어 있습니다."라고 말합니다. 이는 부분적으로 UTF8이 아닌 데이터임을 의미합니다. json_encode doc

로 json_encode()는 문자열 기본적 PHP 문자열은 ISO-8859-1 인코딩하는 동안 UTF8 포맷으로 인코딩 할 것으로 예상하는 것이, 하단에 메모를 갖는다. 이것은 다음을 의미합니다.

json_encode (array ('àü'))); 빈 문자열의 JSON 표현을 생성 할 것이다

반면

로 json_encode (어레이 (utf8_encode ("AU")));

이 적용됩니다.

UTF8이 아닌 입력으로 인해 JSON의 실패한 세그먼트가 있습니까?

+0

실제로 json 인코딩 전에 모든 내용을 utf8로 인코딩하려고했지만 그 중 하나도 작동하지 않았습니다. – Ofir

+0

오류가 UTF-8에 직접 연결되어 있지 않습니다. 나는 그것에 부울 값 (boolean value)을 갖거나 그 종류의 것 (사실 대신 사실 e)을 가질 수있다. – Ofir

1

내 머리를 거의 하루 동안 긁고 나서 문제가 json_encode 함수에 없다는 결론에 도달했습니다. 그것은 나의 포스트 기능과 함께했다.

기본적으로 json_encode는 다른 서비스로 전송할 데이터를 준비 중입니다. 오늘 전에는 stream_context_create와 fopen을 사용하여 외부 서비스에 데이터를 게시했지만 이제는 fsockopen과 fputs를 사용하며 작동하는 것으로 보입니다. 나는 문제의 본질에 관해서는 확실 해요하지만

, 나는 지금 작동 :) BTW

행복 해요 :이 과정 후에, 나는 나 자신에게 입력 및 출력 (JSON 모두)이 메일 처음에 문제가 있음을 내가 어떻게 보았는지. 이 문제는 여전히 지속되지만 메일 인코딩이나 그 종류의 인코딩과 관련이 있다고 생각합니다.

는 는