2012-04-04 7 views
1

코딩 지식이 부족한 저의 삶에 대해 알아낼 수 없지만 꽤 간단한 문제인 것처럼 보입니다. 어떤 잘못된 이름을 용서하십시오! 따라서 JSON 문자열이 포함 된 서명 된 요청이 포함 된 페이지로가는 URL이 있습니다 (Facebook 페이지 임). 해당 JSON 문자열을 검색 한 다음 특정 부분을 추출해야합니다. 나는 현재 URL 형식을 제어 할 권한이 없습니다. 그것이 내가 다음과 같은 코드를 가지고가는 페이지에서 PHP로 JSON 문자열에서 특정 값 추출하기

:

<?php 
$signed_request = $_REQUEST['signed_request']; // Get the POST signed_request variable. 

if(isset($signed_request)) // Determine if signed_request is blank. 
{ 
$pre = explode('.',$signed_request); // Get the part of the signed_request we need. 
$json = base64_decode($pre['1']); // Base64 Decode signed_request making it JSON. 
$obj = json_decode($json,true); // Split the JSON into arrays. 

echo $obj['app_data']; 
} 
else 
{ 
die('No signed request avaliable.'); //If there is no signed_request, stop processing script. 
} 
?> 

잘 작동, 및 $ OBJ [ 'app_data을'] 에코; prints : {q : "id_src = abc123456789",

그 자체는 JSON 문자열이므로 json_decode를 실행하여 id_src = abc123456789를 인쇄 할 수 있다고 생각했습니다.

$appdata = $obj['app_data']; 
$idcode = json_decode($appdata,true); 
에코 $의 IDCODE [ 'Q'] 얹는

,하지만 단 하나의 중괄호를 인쇄 :이 같은 것을 시도했다. 나는 다양한 변형, ''표시 제거, true 등 제거를 시도했습니다.

최종 목표는 id_src 부분이 아니라 abc123456789 값을 추출하는 것입니다. 나는 며칠 후에 그것을 이해할 가능성이 거의 없기 때문에 물어 보는 것이 더 빠를 것이라고 생각했습니다.

모두에게 감사드립니다!

EDIT : $ json의 스 니펫이 추가되었습니다. echo $ json; 다음을 인쇄합니다.

{"algorithm":"HMAC-SHA256","app_data":"{q:\"id_src=abc123456789\",}","issued_at":1333500860,"page":{"id":"380641958713853","liked":false,"admin":true},"user":{"country":"nz","locale":"en_GB","age":{"min":21}}} 

문제를 일으키는 id_src 값 다음에 쉼표를 사용합니까?

+0

당신이 후 반환 된 JSON의 조각을 게시 할 수'base64_decode를'그것? JSON이 가져 오는 과정에서 어딘가에서 손상되었을 가능성이 있지만, 스 니펫 없이는이를 알 수 없습니다. – Bojangles

+0

편집 됨, 스 니펫 추가 – Dave

답변

2

당신은 당신이 이런 식으로 원하는 추출 할 수 있습니다 :()

preg_match('/"\\w+?=(\\w+?)"/', $obj['app_data'], $matches); 

print_r($matches); // Array ([0] => "id_src=abc123456789" [1] => abc123456789) 
+0

내 영웅! 고마워, print_r ($ matches [1])은 내가 원하는 것을 정확하게 출력한다. – Dave

+0

도움이된다면 엄지 손가락으로 답하십시오 : D –

0

{q:"id_src=abc123456789",}은 (는) 유효한 JSON이 아닙니다. 시도 {"q":"id_src=abc123456789"}

+0

Hmmm 이는 json_decode 함수가 출력하는 것으로, 이는 iFrame에 전달 된 signed_request의 디코딩에서 비롯된 것입니다. 이것은 app_data가 URL에 추가되는 방식에 오류가 있음을 의미 할 수 있습니다. id_src 값을 추출 할 수있는 방법이 있습니까? – Dave

관련 문제