0

最近,我尝试使用 google place api 来搜索地点。起初,它运作良好。然后我发现当我传递包含空格的查询时。响应总是错误的请求。但是,当我将查询直接放入浏览器时,它运行良好。这是我的代码,有人可以帮我吗?

$url = "https://maps.googleapis.com/maps/api/place/textsearch/json?query=$name&location=$lat,$lng&radius=$raidus&types=restaurant&sensor=false&key=mykey";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// Set so curl_exec returns the result instead of outputting it.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Get the response and close the channel.
$response = curl_exec($ch);

例如,如果 $name 是 'restaurant',它可以工作。但如果 $name 是“餐厅食物”,则表示请求不正确。但是,我将 url 放入浏览器,它又可以工作了。我尝试清理查询参数,但响应仍然表示错误请求。我希望有人可以帮助我。

4

2 回答 2

2

总是在某处传递 URL 时,您应该对其进行编码。这将用 %20 等替换例如空格。所以你的 $name 将是 = restaurant%20food

不用担心谷歌,它会自动解码。

您可以手动对其进行编码,也可以使用如下功能:

$query = urlencode($query);

希望能帮助到你

于 2012-09-03T07:34:30.043 回答
1

正如其他人所说,您需要使用 PHP 对 URL 参数进行编码urlencode()

$url = "https://maps.googleapis.com/maps/api/place/textsearch/json?query=". urlencode($name) ."&location=$lat,$lng&radius=$raidus&types=restaurant&sensor=false&key=mykey";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// Set so curl_exec returns the result instead of outputting it.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Get the response and close the channel.
$response = curl_exec($ch);
于 2012-09-03T07:39:07.247 回答