Переменные PHP не передаются правильно по URL-адресу из API

Я пытаюсь использовать скрипт Premium URL Shortener от codecanyon, я обратился за поддержкой, но они, кажется, немного заняты, поэтому время ответа не слишком быстрое.

Проблема, с которой я сталкиваюсь, заключается в том, что API отправляет запрос скрипту сокращения URL-адресов со следующим сокращенным запросом для примера:

$short = "http://myurl/api?api=MYAPI&format=text&url=http://myfullwebsite.com/email/quote.php?fullname=$fullname&address=$address&emailaddress=$emailaddress";

Хотя переменные правильно размещаются в скрипте, используя функцию эха в конце скрипта, после отправки запроса API видно, что они правильно вставлены, например:

http://myurl/api?api=MYAPI&format=text&url=http://myfullwebsite.com/email/quote.php?fullname=Dan Smith&address=12 Main Street, London&[email protected]

Однако, если я щелкну сокращенный URL-адрес, предоставленный мне из сценария, я получу только следующую строку URL-адреса в браузере:

http://myfullwebsite.com/email/quote.php?fullname=Dan

Кажется, как только есть пробел или даже если нет второго имени, такого как Дэн Смит, и только Дэн является доступным именем, он даже не будет применять второй амперсанд или знак &.

Я пытался использовать urlecode(), но до сих пор не получаю удовольствия, и последние 3 дня я рву на себе волосы!

Как начинающему новичку, было довольно сложно попытаться достичь конечного результата, и он кажется недостижимым, поэтому я был бы признателен за любую помощь или совет, если это возможно. Может быть, я упускаю что-то такое простое?

Я думал о построении запроса URL-адреса из массива переменных, но как новичок я пробовал один способ и потерпел неудачу, поэтому не уверен, что сделал это неправильно.

Вот мой полный код API, где я пробовал как с SESSION, так и с GET, но это не проблема, так как конечный результат отображается в браузере с переменными там.. только когда вы переходите по сокращенной ссылке URL, вы видите, что они отсутствующий.

    <?php
session_start();

$fullname = htmlspecialchars($_GET["fullname"]);
$address = htmlspecialchars($_GET["address"]);
$postcode = htmlspecialchars($_GET["postcode"]);
$emailaddress = htmlspecialchars($_GET["emailaddress"]);


$short = "http://myurl/api?api=MYAPI&format=text&url=http://ukhomesurveys.co.uk/email/quote.php?fullname=$fullname&address=$address&emailaddress=$emailaddress";


 echo $short;

// Using Plain Text Response
  $api_url = $short;
  $res= @file_get_contents($api_url);
  if($res){
    echo $res;
  }


?>

Надеюсь, я все рассказал и надеюсь, что никого не запутал. Спасибо.


person Birdy    schedule 29.07.2015    source источник
comment
Вы пытались заменить &s на в URL?   -  person Rob G    schedule 29.07.2015
comment
Привет, Роб, да, у меня есть приятель, я попробовал это как первый вариант, думая, что это будет легко исправить, но, к сожалению, никогда не было :( кажется, он просто не хочет поднимать усилитель или &, как только URL-адрес обрабатывает первую переменную, например as [email protected].. Хотя использование эха доказывает, что полная строка отправляется в API, я предполагаю, что сокращенный URL-адрес неправильно обрабатывает процесс.   -  person Birdy    schedule 29.07.2015


Ответы (2)


Я думаю, что хороший выбор здесь — закодировать ваш запрос с помощью base64, а затем передать его сокращателю. В вашем http://myfullwebsite.com/email/quote.php вы просто декодируете запрос и используй это. Стандартными функциями PHP являются base64_encode и base64_decode.

person Timofey    schedule 29.07.2015
comment
Можете ли вы привести пример того, что вы подразумеваете под кодировкой base64? - person Birdy; 29.07.2015
comment
Я имею в виду, что вы берете всю строку запроса (param=val¶m=val...) и кодируете ее, затем используете quote.php?encoded=base64_encoded_string, а затем декодируете ее в своем quote.php - person Timofey; 29.07.2015
comment
Разве это не будет работать правильно только с использованием почтового метода? Поскольку происходит то, что пользователь или я, например, в режиме тестирования, используют сокращенный URL-адрес вместо того, чтобы все переменные и значения следовали за URL-адресом, поэтому я бы следовал этому, например: to.com/TeSt, и он должен мгновенно перенаправить меня на: mywebsite.com/, но вместо этого он дает вам только mywebsite.com/quote.php?fullname=(first Часть значения, если в нем есть пробелы), поэтому fullname=Dan, а остальные не будут отображаться. - person Birdy; 29.07.2015
comment
Он также будет работать с GET. Потому что вы просто передаете строковое значение. И строка base64 не содержит пробелов, поэтому URL-адрес должен быть правильно сокращен. - person Timofey; 29.07.2015

Вы пытались закодировать URI с помощью rawurlencode?

$url = rawurlencode('http://myfullwebsite.com/email/quote.php?fullname=Dan Smith&address=12 Main Street, London&[email protected]');
person kav    schedule 29.07.2015
comment
Unixarmy, если честно, я не могу вспомнить, делал я это или нет, но я обязательно попробую это сейчас. Вы бы рекомендовали запускать его как: $url = rawurlencode('myfullwebsite.com/email/); или вы бы использовали: $url = rawurlencode('myfullwebsite.com/email/); обратите внимание на одиночные ' кавычки и .$fullname. - person Birdy; 29.07.2015
comment
Если вы используете строки в одинарных кавычках, это должно выглядеть так: этим. - person kav; 29.07.2015
comment
К сожалению, это не сработало, использование rawurlencode остановило сокращение, даже предоставив URL-адрес, поэтому я переключил rawurlencode, чтобы просто кодировать переменные, что по-прежнему не приносит радости :( - person Birdy; 29.07.2015