jsonp -> json_decode ()

по какой-то причине я не могу получить информацию из возвращаемой строки jsonp,

<?php // Created by Talisman 01/2010 ★✩ $vorto = $_GET['vorto']; // Get the Word from Outer Space and Search for it! if (isset($vorto)) { echo $vorto; } else { $Help = "No Vorto -> add ?vorto=TheWordYouWant to the end of this website"; echo $Help; } // Now Lets Search Alex's Vortaro, It uses jsonp // ex. http://vortaro.us.to/ajax/epo/eng/petas/?callback=? // Future Feature inproved language functinality $AVurl1 = "http://vortaro.us.to/ajax/epo/eng/"; $AVurl2 = "/?callback="; $AVfinalurl= $AVurl1 . $vorto . $AVurl2; echo $AVfinalurl . ' </br> '; // DEBUG CODE $AVcontent = file_get_contents($AVfinalurl) ; echo $AVcontent . ' </br> '; // DEBUG CODE 

// ★ ✩ Почему эта следующая строка не работает?

  $AVDecode = json_decode($AVcontent); // /* if(isset( $AVcontent)) { // DEBUG CODE echo "json_decode set AVcontent" . ' </br> '; } else { echo "something fishy here" . ' </br> '; } if (empty($AVcontent)){ echo "EMPTY EMPTY" . ' </br> '; } else { echo "Not Empty". ' </br> '; } echo $AVDecode . ' </br> '; // */ // Why can't I echo or access information with $AVDecode? Is it something with // jsonp? ?> 

это мои результаты

komputilojhttp: //vortaro.us.to/ajax/epo/eng/komputiloj/ обратного вызова =

({"text": "komputilo: computer"})

json_decode set AVcontent

Не пусто

Я должен видеть echo $ AVDecode

Предложение отладки:

Проверьте вывод json_last_error () . Это должно дать вам точную причину, почему она не работает. Тем не менее, доступно только для PHP 5.3.0.

Причина:

JSONP не идентичен JSON . Он содержит дополнительные данные, которые разбивают json_decode ().

Решение:

Удалите дополнительные скобки, используя substr($AVDecode, 1, strlen($AVDecode)-2)

вы не можете отразить объект или массив. сообщите нам, что распечатывает эта строка:

 print_r(json_decode($AVcontent)); 

поместите его сразу после $AVDecode = json_decode($AVcontent);

Ваш пример URL возвращается

 ?({"text":"<b>peti</b>: ask, ask for, beg, bid, request"}) 

JSONP недействителен JSON, он перенесет его в ваш запрошенный ответ, например

 callbackname(JSONIsInHere) 

Поэтому вам нужно подстроить $ AVcontent от первого появления (до последнего появления), чтобы вы получили параметр обратного вызова, который является допустимым JSON и может быть закодирован с помощью json_decode.