为什么谷歌距离矩阵不接受我的变量作为位置?

时间:2016-02-04 23:04:16

标签: php google-distancematrix-api

我试图通过谷歌距离矩阵api传递一些html表单输入。我已将它们放入变量并用" +"替换空格。迹象。当我回应变量时,它们是完美的。当我对这些变量值进行硬编码时,api会返回距离,但是当我使用变量表示时它不返回任何内容。

<?php

$start = $_POST["origin"];
$end = $_POST["destination"];


$value = strtolower(str_replace(' ', '+', $start));

echo $value;

$value2 = strtolower(str_replace(' ', '+', $end));

echo $value2;

$url = 'http://maps.googleapis.com/maps/api/distancematrix/json?   
origins=$value&destinations=$value2&mode=driving&language=English- 
en&key=$key"';
$json = file_get_contents($url); // get the data from Google Maps API
$result = json_decode($json, true); // convert it from JSON to php array
echo $result['rows'][0]['elements'][0]['distance']['text'];

?>

2 个答案:

答案 0 :(得分:1)

问题在于使用PHP变量时使用/滥用单引号。如果使用单引号,则必须取消引用/转义其中的变量,以便正确解释它们。也许更有利的方法是在整个字符串/ url周围使用双引号 - 如果需要,使用花括号来确保正确处理某些类型的变量(即:使用数组变量{$arr['var']}

对于上述情况,以下情况应该起作用 - 故意在一行上显示,以突出显示网址中没有空格。

$url = "http://maps.googleapis.com/maps/api/distancematrix/json?origins={$value}&destin‌​ations={$value2}&mode=driving&language=English-en&key={$key}";

答案 1 :(得分:0)

您的$ url变量使用文字引号(单引号)设置。

如果要在字符串中使用变量,则需要使用双引号,否则需要连接。

我还会在你的网址字符串的末尾看到一个额外的双引号,请尝试更正:

<?php

$start = urlencode($_POST["origin"]);
$end = urlencode($_POST["destination"]);

$url = "http://maps.googleapis.com/maps/api/distancematrix/json?   
origins={$start}&destinations={$end}&mode=driving&language=English- 
en&key=$key";

$json = file_get_contents($url); // get the data from Google Maps API
$result = json_decode($json, true); // convert it from JSON to php array

echo $result['rows'][0]['elements'][0]['distance']['text'];

?>