我正在尝试在解码的数据中搜索关键字电子邮件。但是它无法从json_decode中获取数组类型。
这是代码
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => $url,
CURLOPT_USERAGENT => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36'
));
$resp = json_decode(curl_exec($curl), true);
if(is_array($resp) && array_key_exists("email", $resp))
{
echo $data_arr[0] . "email: ";
$content = $resp["email"];
fwrite($fp,$content);
}
准确的错误是:
array_key_exists()期望参数2为数组,在第34行的index.php中为null
编辑:我发现了一些错误。由于错误(url格式错误),Curl执行失败。仍然无法弄清楚在这种情况下url是如何格式错误的。url就是这样提取的。
$data = fgets($fp);
$data_arr = split(",", $data);
$token_arr = isset($data_arr[1]) ? split('"', $data_arr[1]) : null;
$url = isset($token_arr[1]) ? "https://graph.facebook.com/v2.3/me?access_token=" . $token_arr[1] : null;
尝试使用utf8_encode
$data = curl_exec($curl);
$data = utf8_encode($data);
$resp = json_decode($data, true);
注意:
utf8_decode
仅适用于utf8此函数仅适用于UTF-8编码的字符串。
PHP实现了原始»RFC 4627中指定的JSON超集,它还将对标量类型和NULL进行编码和解码。RFC 4627仅当这些值嵌套在数组或对象中时才支持这些值。尽管这个超集与新的»RFC 7159(旨在取代RFC 4627)和»ECMA-404中"JSON文本"的扩展定义一致,但这可能会导致与旧的JSON解析器的互操作性问题,这些解析器在编码单个标量值时严格遵守RFC 4627。
来源:http://php.net/manual/en/function.json-decode.php
需要在URL中编码参数,请尝试urlencode
或rawurlecnode
,例如:
注意,我在
? :
中添加了()
$data = fgets($fp);
$data_arr = split(",", $data);
$token_arr = isset($data_arr[1]) ? split('"', $data_arr[1]) : null;
$url = isset($token_arr[1]) ? ("https://graph.facebook.com/v2.3/me?access_token=" . urlencode($token_arr[1])) : null;
检查发送是否为NULL
如果curl_error
返回malformed
,意思是$url = NULL
,那么问题出在生成令牌的代码中,请尝试以下操作:
$data = fgets($fp);
$data_arr = split(",", $data);
$token_arr = isset($data_arr[1]) ? split('"', $data_arr[1]) : null;
$url = isset($token_arr[1]) ? ("https://graph.facebook.com/v2.3/me?access_token=" . $token_arr[1]) : null;
if (empty($url)) {
echo 'URL is NULL or EMPTY';
exit;
}
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => $url,
CURLOPT_USERAGENT => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36'
));
$data = curl_exec($curl);
$data = utf8_encode($data);
$resp = json_decode($data, true);
if(is_array($resp) && array_key_exists("email", $resp))
{
echo $data_arr[0] . "email: ";
$content = $resp["email"];
fwrite($fp,$content);
}