2011-12-07 1 views
0

언젠가 AJAX 호출시 내 DEV 환경 (두 개의 다른 상자)에서 내 WordPress 플러그인이 실패하기 시작했습니다.json_encode를 호출하면 외부 '+'가 출력 버퍼에 저장됩니다.

$t = json_encode(<some array>); 

관계없는 + 문자가 출력 버퍼에 삽입 : 내가 볼 것은 내가 호출 할 때이다. 나는 ob_get_content() 호출의 결과를보고 이것을 관찰했다. $t에 정확한 JSON 결과가 표시되고 <some array>의 내용은 중요하지 않습니다.

필자는 WordPress의 컨텍스트 내에서만 발생하는 것으로 보아서 PHP 문제는 아니라고 판단했습니다.

내 플러그인에 다음 함수에 절연 :

function my_action_callback() { 
    $a = array("a" => "orange", "b" => "banana", "c" => "apple"); 
    echo json_encode($a); 
    die(); // this is required to return a proper result 
} 

my_action_callback는 AJAX 호출에 워드 프레스에 의해 호출되는 등록 된 콜백 함수이다. 나는 json_encode의 결과를 에코 대신 변수에 할당 할 수 있습니다. 결과는 좋지만 출력 버퍼를 확인하면 단 하나의 +이 삽입되었습니다.

불행히도이 문제를 디버깅하기에는 너무 오래 기다렸으므로 내 환경에서 변경 한 사항을 알 수 없습니다. 어디서부터 시작해야할지 모르겠습니다.

환경은 내가 결과를 반향하고 있지 않다 때문에, json_encode 출력 버퍼에 아무 것도 넣어 호출하는 것입니다 왜

워드 프레스 3.2.1을 실행 PHP 5.3.5인가?

+0

모든 파일을 살펴보십시오. ob_start와 ob_get_contents 사이에 어딘가에 "+"가있는 것 같습니다. – halfdan

+0

이 문제를 재현 할 수있는 컴팩트 버전의 코드를 만들 수 있습니까? – jprofitt

+0

아마도이 문제와 관련이 있습니다 : http://stackoverflow.com/questions/6811845/php-json-encode-changing-spaces-to-plus-symbols –

답변

1

깨끗한 PHP 환경에서 시작하여 +를 인쇄하는지 확인하고 작성하십시오. 그렇다면 PHP 버그입니다.

위의 코드를 제거하고 코드에 넣고 +가 인쇄되는지 확인하십시오. 그렇다면 코드에 버그가 있습니다.

PHP 환경을 다시 시작하십시오. 각 변경 후에 +를 인쇄합니다. 그럴 때, 범인을 찾았습니다.

마지막으로 +를 볼 수 없으면 마법입니다. ;-)

집에서 배울 점 : 버그가 너무 오래 머무르지 않도록하십시오.

+0

마침내 여는 대괄호 바로 앞에있는 '+'오류가 PHP 파일에서 발생했습니다. – ed4becky

관련 문제