将jsonp转为PHP数组和对象。
/** * jsonp转数组|Jsonp转json * @param string $jsonp jsonp字符串 * @param bool $assoc true转数组 false转对象 * @return array|ArrayObject|null */ function jsonp_decode($jsonp, $assoc = false) { $pattern = '/\((.*)\)/s'; if (preg_match($pattern, $jsonp, $matches)) { if (!empty($matches['1'])) { return json_decode($matches['1'], $assoc); } return null; } return null; }
使用实例:
//jsonp字符串 $jsonp = 'callbackFunction(["customername1","customername2"])'; //jsonp转数组 $jsonp_result = jsonp_decode($jsonp,true); var_dump($jsonp_result);
转换结果:
array(2) { [0]=> string(13) "customername1" [1]=> string(13) "customername2" }
也可以试试下面的这个方法,宇润写的,我没有测试:
/** * 把jsonp转为php数组 * @param string $jsonp jsonp字符串 * @param boolean $assoc 当该参数为true时,将返回array而非object * @return array */ function jsonp_decode($jsonp, $assoc = false) { $jsonp = trim($jsonp); if(isset($jsonp[0]) && $jsonp[0] !== '[' && $jsonp[0] !== '{') { $begin = strpos($jsonp, '('); if(false !== $begin) { $end = strrpos($jsonp, ')'); if(false !== $end) { $jsonp = substr($jsonp, $begin + 1, $end - $begin - 1); } } } return json_decode($jsonp, $assoc); }