2012-11-26 2 views
0

현재 그래프 API에서 사용자에 관한 데이터를 얻기 위해 cURL을 사용하는 Heroku에서 PHP Facebook 앱을 호스팅하고 있습니다.다른 서버의 json_decode와 다른 출력

Heroku 시스템의 json_decode가 유니 코드 문자를 올바르게 출력하지 못하여 반환 된 데이터가 유니 코드 문자를 포함하는 경우 문제가 발생합니다. 내 로컬 시스템의 출력 (동일한 코드)이 정상입니다.

stdClass Object ([id] => 100003517896374 [name] => Skyé Montána [first_name] => Skyé [last_name] => Montána [link] => http://www.facebook.com/skye.montana.73 [username] => skye.montana.73 [gender] => female [locale] => en_US) 

에 : 원시 JSON을 보면

이 그래프에서 반환, 나는 그것이 json_decode는 다음과 같은 목적으로 변환, 유니 코드 내 로컬 시스템에서 예를 들어

{"id":"100003517896374","name":"Sky\u00e9  Mont\u00e1na","first_name":"Sky\u00e9","last_name":"Mont\u00e1na","link":"http:\/\/www.facebook.com\/skye.montana.73","username":"skye.montana.73","gender":"female","locale":"en_US"} 

탈출가 포함되어있는 것을 확인할 수 있습니다 Heroku 시스템은 다음과 같이 변환됩니다.

stdClass Object ([id] => 100003517896374 [name] => Skyé Montána [first_name] => Skyé [last_name] => Montána [link] => http://www.facebook.com/skye.montana.73 [username] => skye.montana.73 [gender] => female [locale] => en_US) 

json _decode는 유니 코드를 인식하고 올바르게 해석한다는 것입니다. 이 경우 Heroku에서는 유니 코드를 인식하는 것으로 보이지만 올바르게 해석하지는 않습니다.

이 문제를 해결하기 위해 필요한 PHP 설정이 있습니까? 아마도 magic_quotes와 관련이 있습니까? 두 서버가 동일한 magic_quotes 옵션 (꺼짐)을 갖도록 설정했지만 아무런 차이가 없습니다.

답변

1

좋아요, 평소대로 5 분 후에 게시에 대한 답변을 찾았습니다.

Apache에는 AddDefaultCharset 지시문이 있습니다. 응답 헤더에 아무 것도 추가되지 않는 경우 Off로 설정할 수 있습니다. On, 여기서 iso-8859-1은 응답 헤더에 content-type으로 추가됩니다. 또는 특정 문자 세트로 전송되며,이 세트는 응답 헤더에 content-type으로 추가됩니다.

내 로컬 Apache env에서 AddDefaultCharset을 사용하여 기본 문자 집합을 UTF-8로 설정했습니다.이 기본 문자 집합은 HTML 페이지의 메타 태그에서 설정된 값을 무시합니다.

Heroku에서 AddDefaultCharset은 off로 설정됩니다. 즉, charset은 HTML 페이지의 메타 태그에 의해 항상 결정됩니다.

내 EPIC FAIL은 메타 태그에 오타가 있음을 나타냅니다. 아파치 설정이 우선시 되었기 때문에 내 로컬 환경에서는 볼 수 없었지만 콘텐츠 유형이 메타 태그 설정에 의존하는 Heroku에서 보였습니다.

+1

대부분의 상황에서'Ã ©'(또는 유사한)를 보게되면 UTF8 바이트가 ISO-8859-1/Windows-1252 (잘못된 헤더, 올바른 바이트)로 해석됩니다. ' '가 표시되면 ISO-8859-1/Windows-1252 바이트가 UTF-8 (오른쪽 헤더, 잘못된 바이트)로 해석됩니다. – Esailija

+0

@Garreth 나는 같은 문제에 직면하고 있습니다. JSON 인코딩 된 이진 파일 내용을 json_decode()를 사용하여 디코딩하고 출력에 이러한 정크 문자가 포함 된 서버에 게시물 요청에 보냅니다. 이 문제를 해결하는 방법을 알려주시겠습니까? 어떤 머리글이 POST 요청을 피하기 위해이 ??? – anni