当我尝试解析我的地理编码链接时,由于放大器而出现错误;声明。在我“json_decode”字符串之前,我有一个名为www.something.com/something?bla=bla&sensor=true的链接,但是当我将它作为参数发送到函数时它的&字符正在转换为&
。像
http://maps.googleapis.com/maps/api/geocode/json?address=Bekirdere,%20%C4%B0zmir&sensor=true
工作正常,但链接如
http://maps.googleapis.com/maps/api/geocode/json?address=Bekkirdere,%20%C4%B0zmit&sensor=true
没有给出任何结果。 (&
转换为&
)
如何阻止它转换?
我的解析器功能:
function get_url_contents($url)
{
$url = str_replace(' ', '%20', $url);
$crl = curl_init();
$timeout = 5;
curl_setopt ($crl, CURLOPT_URL,$url);
curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
$ret = curl_exec($crl);
curl_close($crl);
return $ret;
}
function __construct($url)
{
$json = $this->get_url_contents($url);
$this->_jsonArray = json_decode($json, true);
}
答案 0 :(得分:0)
PHP urlencode()函数比执行str_replace更好,你应该只编码那些GET值的URL部分;你不应该对整个URL进行编码,因为正如你所指出的,这也会编码将变量彼此分开的&符号。
您需要构建如下所示的URL:
$url = 'http://maps.googleapis.com/maps/api/geocode/json?address=';
$url .= urlencode('Bekirdere, Izmir');
$url .= '&sensor=true';
然后按上述方式进行curl
来电。
我已经测试了下面的测试脚本,它可以工作:
$url = 'http://maps.googleapis.com/maps/api/geocode/json?address=';
$url .= urlencode('Bekirdere, Izmir');
$url .= '&sensor=true';
$crl = curl_init();
$timeout = 5;
curl_setopt ($crl, CURLOPT_URL,$url);
curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
$ret = curl_exec($crl);
curl_close($crl);
$returned_data = json_decode($ret, true);
var_dump($returned_data);
您需要将其放入您的代码结构中,或者重构您的类以接收$address
参数(例如“Izmir,Turkey”),而不是完整的URL(就像现在一样)。这样,您就可以在构建完整的URL之前转义地址部分以传递给curl
。