Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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 通过GET以通用方式向任意url传递参数_Php_Get - Fatal编程技术网

Php 通过GET以通用方式向任意url传递参数

Php 通过GET以通用方式向任意url传递参数,php,get,Php,Get,我有从外面给我的back\u url。我需要生成一个散列,并使用以下参数重定向到此back\u url,标题(“Location:$back\u url?hash=123sdf”)。但问题是我不知道back\u url的格式 它可能是www.example.com,我有标题(“位置:$back\u url/?hash=123sdf”)sj没关系 它可能www.example.com/?param=value如果我使用header(“Location:$back\u url/?hash=123s

我有从外面给我的
back\u url
。我需要生成一个散列,并使用以下参数重定向到此
back\u url
标题(“Location:$back\u url?hash=123sdf”)
。但问题是我不知道
back\u url
的格式

  • 它可能是
    www.example.com
    ,我有
    标题(“位置:$back\u url/?hash=123sdf”)
    sj没关系
  • 它可能
    www.example.com/?param=value
    如果我使用h
    eader(“Location:$back\u url/?hash=123sdf”)
    它是错误的,因为它将是
    www.example.com/?param=value/?hash=123asd

等等。问题是:将参数传递到
back\u url
忽略其格式的通用方法是什么?

您尝试过使用吗?

您尝试过使用吗?

一种复杂但非常干净的方法是

  • 用于将查询字符串(如果有)从URL提取到数组中
  • hash
    添加到结果数组中:
    $params[“hash”]=“1234”
  • 用于将参数粘回到查询字符串中
  • 获取
    parse_url()
    返回的所有组件,并将它们粘合回完整的url

需要注意的一点是,这会将URL分解为it组件并将其粘在一起,因此可能无法处理一开始就被破坏的URL。

一种复杂但非常干净的方法是

  • 用于将查询字符串(如果有)从URL提取到数组中
  • hash
    添加到结果数组中:
    $params[“hash”]=“1234”
  • 用于将参数粘回到查询字符串中
  • 获取
    parse_url()
    返回的所有组件,并将它们粘合回完整的url

需要注意的一点是,这会将URL分解为it组件并将其粘在一起,因此可能无法处理一开始就被破坏的URL。

如果您有PECL HTTP扩展,请使用:


如果没有http_build_url,可以使用查找url的不同部分。那就是把它们粘在一起的问题了。手册中的解决方案可根据您的需要进行定制。

如果您有PECL HTTP扩展,请使用:


如果没有http_build_url,可以使用查找url的不同部分。那就是把它们粘在一起的问题了。手册中的解决方案可以根据您的需要进行定制。

嗯,您需要检测
$back\u url
是否有其他查询参数(或获取变量),如果没有,则使用
?hash=123asd
附加哈希,如果确实有查询参数,则使用
&hash=123asd


如果您知道
$back\u url
是一个完整的url,就像(重要的部分是
http://whatever.com
,您可以使用获取所有组件,然后继续使用Pekka的答案。如果您的
$back\u url
不是以
http://...
,然后在前面加上正确的值(我假设
http://$\u SERVER['host']
再次,继续Pekka的回答。

好吧,您需要检测
$back\u url
是否有其他查询参数(或获取变量),如果没有,则使用
?hash=123asd
附加您的哈希,如果确实有查询参数,则使用
&hash=123asd

如果您知道
$back\u url
是一个完整的url,就像(重要的部分是
http://whatever.com
,您可以使用获取所有组件,然后继续使用Pekka的答案。如果您的
$back\u url
不是以
http://...
,然后在前面加上正确的值(我假设
http://$\u SERVER['host']
然后再次继续Pekka的回答。

编写了以下函数:

 private function addUrlParam(array $params, $url){
    $parsed = parse_url($url);
    if(!isset($parsed['query']))
    {
        $slash = '';
        if(substr($url, -1) !== '/')
            $slash = '/';
        $start_with = $slash.'?';
    }
    else
        $start_with = '&';

    $scheme = '';
    if(!isset($parsed['scheme']))
        $scheme = 'http://';

    $query = http_build_query($params);
    return $scheme.$url.$start_with.$query;
}  
看起来它非常适合我。谢谢大家。

编写了以下函数:

 private function addUrlParam(array $params, $url){
    $parsed = parse_url($url);
    if(!isset($parsed['query']))
    {
        $slash = '';
        if(substr($url, -1) !== '/')
            $slash = '/';
        $start_with = $slash.'?';
    }
    else
        $start_with = '&';

    $scheme = '';
    if(!isset($parsed['scheme']))
        $scheme = 'http://';

    $query = http_build_query($params);
    return $scheme.$url.$start_with.$query;
}  

看起来很适合我。谢谢大家。

如果安装了PECL HTTP扩展,这是首选方法,否则HTTP\U build\u查询不可用。我认为它与HTTP\U build\u url具有相同的依赖性。你是对的。如果安装了PECL HTTP扩展,这是首选方法,否则HTTP\U build\u查询不可用。我我认为它与http_build_url具有相同的依赖性。你是正确的。谢谢大家。我使用了你的评论并编写了适合我的小函数。我使用了你的评论并编写了适合我的小函数