Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP变量未从API正确传递到url_Php_Api_Url_Url Shortener - Fatal编程技术网

PHP变量未从API正确传递到url

PHP变量未从API正确传递到url,php,api,url,url-shortener,Php,Api,Url,Url Shortener,我正在尝试使用codecanyon的Premium URL Shortener脚本,我已经请求了支持,但他们似乎有点忙,所以响应时间不是很快 我遇到的问题是,当API将请求发送到url shortener脚本时,出于示例目的,使用以下缩短的查询: $short = "http://myurl/api?api=MYAPI&format=text&url=http://myfullwebsite.com/email/quote.php?fullname=$fullname&a

我正在尝试使用codecanyon的Premium URL Shortener脚本,我已经请求了支持,但他们似乎有点忙,所以响应时间不是很快

我遇到的问题是,当API将请求发送到url shortener脚本时,出于示例目的,使用以下缩短的查询:

$short = "http://myurl/api?api=MYAPI&format=text&url=http://myfullwebsite.com/email/quote.php?fullname=$fullname&address=$address&emailaddress=$emailaddress";
虽然在发送api请求后,在脚本末尾使用echo函数将变量正确地放置在脚本中,但显示它们已正确插入,如下所示:

http://myurl/api?api=MYAPI&format=text&url=http://myfullwebsite.com/email/quote.php?fullname=Dan Smith&address=12 Main Street, London&emailaddress=dan@smith.com
但是,如果单击脚本中提供给我的缩短url,我只会在浏览器中显示以下url字符串:

http://myfullwebsite.com/email/quote.php?fullname=Dan
似乎只要有一个空格,或者即使没有第二个名称,如Dan Smith,并且只有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;
  }


?>


希望我涵盖了一切,希望我没有迷惑任何人。谢谢。

您是否尝试使用编码URI


我认为最好的选择是使用base64对查询进行编码,然后将其传递给缩短器。在您的应用程序中,您只需解码查询并使用它。standart PHP函数是base64_encode和base64_decode。

您是否尝试过用&;替换&s;在url中?嗨,Rob,是的,我有朋友,我尝试过作为第一个选项,认为这将是一个简单的解决方案,但不幸的是,从来没有:(它似乎只是不想在url处理第一个变量(如fullname=Dan&emailaddress)时立即获取amp或&=Dan@smith.com..虽然使用echo可以证明完整的字符串被发送到api,但我认为缩短的url没有正确处理该过程当然,我现在就试试。您建议以:$url=rawurlencode(')的形式运行它,还是使用:$url=rawurlencode('));请注意单引号和.$fullname。如果您使用单引号字符串,很遗憾,它似乎不起作用,使用rawurlencode会阻止缩短器甚至提供url,因此我将rawurlencode切换为仅编码变量,因为仍然没有乐趣:(您能否提供一个示例,说明base64编码的interms是什么意思?我的意思是您获取整个查询字符串(param=val¶m=val…)然后使用quote.php?encoded=base64_encoded_字符串对其进行编码,然后在quote.phpWont中对其进行解码,这只能使用post方法正确工作?因为发生的情况是,当用户或我(例如,在测试模式下)使用缩短的url,而不是让所有变量和值都跟随url,所以我将遵循这一点例如:它应该立即将我重定向到:但是如果它有空格,它只会给你部分值),所以fullname=Dan和其余部分不会显示。它也会与GET一起工作。因为你只传递字符串值。base64字符串不包含空格,所以URL应该正确缩短。
$url = rawurlencode('http://myfullwebsite.com/email/quote.php?fullname=Dan Smith&address=12 Main Street, London&emailaddress=dan@smith.com');