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 が「restaurant food」の場合、それは悪い要求を示しています。ただし、URLをブラウザに入力すると、再び機能します。クエリ パラメータをサニタイズしようとしましたが、応答は依然として不正な要求でした。誰かが私を助けてくれることを願っています。

4

2 に答える 2

2

URL をどこかに渡すときは常に、エンコードする必要があります。たとえば、スペースを %20 などに置き換えます。したがって、$name は = restaurant%20food になります。

Google について心配する必要はありません。自動的にデコードされます。

手動でエンコードするか、次のような関数を使用できます。

$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 に答える