1

ジオコード リンクを解析しようとすると、アンプが原因でエラーが発生します。声明。文字列を「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);
}
4

1 に答える 1

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これをコード構造に合わせるか、クラスをリファクタリングして、(現在のように) 完全な URL の代わりにパラメーター (「Izmir, Turkey」など)を受け取る必要があります。そうすれば、 に渡す完全な URL を作成する前に、アドレス部分をエスケープできますcurl

于 2012-11-05T00:23:42.913 に答える