Почему матрица расстояний Google не принимает мои переменные в качестве местоположений?

Я пытаюсь передать ввод html формы через API матрицы расстояния Google. Я поместил их в переменные и заменил пробелы со знаком «+». Когда я повторяю переменные, они идеальны. Когда я жестко кодирую эти значения переменных, 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'];

?>

1

Решение

Проблема заключается в использовании / неправильном использовании одинарных кавычек при работе с переменными PHP. Если вы используете одинарные кавычки, то переменные внутри должны быть заключены в кавычки / экранированы, чтобы они правильно интерпретировались. Возможно, более выгодный подход заключается в использовании двойных кавычек вокруг всей строки / URL-адреса. При необходимости используйте фигурные скобки, чтобы обеспечить правильную обработку определенных типов переменных (т. Е. Использование переменной массива {$arr['var']} )

Для описанной выше ситуации должно работать следующее — намеренно показано в одной строке, чтобы подчеркнуть, что в URL теперь нет пробелов.

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

Другие решения

Ваша переменная $ url устанавливается с помощью буквальных кавычек (одинарных кавычек).

Если вы хотите использовать переменные внутри строки, вам нужно использовать двойные кавычки, в противном случае вам нужно объединить.

Я также вижу дополнительную двойную кавычку, висящую на конце вашей строки 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'];

?>
0