将查询字符串添加到随机URL

时间:2013-04-15 11:11:31

标签: php query-string

我想在URL中添加查询字符串,但是URL格式是不可预测的。 URL可以是

  • http://example.com/page/ - > http://example.com/page/?myquery=string
  • http://example.com/page - > http://example.com/page?myquery=string
  • http://example.com?p=page - > http://example.com?p=page&myquery=string

这些是我正在考虑的网址,但可能还有其他格式我不知道。

我想知道是否有标准,库或常用方法来执行此操作。我正在使用PHP。

编辑:我正在使用Cbroe解释和Passerby代码。 Hamza还有另一个function,但我想最好使用PHP函数,并且代码更清晰/更短。

4 个答案:

答案 0 :(得分:3)

function addQuery($url,array $query)
{
    $cache=parse_url($url,PHP_URL_QUERY);
    if(empty($cache)) return $url."?".http_build_query($query);
    else return $url."&".http_build_query($query);
}

// test
$test=array("http://example.com/page/","http://example.com/page","http://example.com/?p=page");
print_r(array_map(function($v){
    return addQuery($v,array("myquery"=>"string"));
},$test));

Live demo

答案 1 :(得分:1)

  

我想知道是否有标准,库或常用方法来执行此操作。我正在使用PHP。

取决于你想要它的失败保护程度 - 从而更复杂 -

最简单的方法是查找网址中是否有? - 如果是,请追加&myquery=string,否则追加?myquery=string。这应该涵盖大多数符合标准的URL。

如果您希望它更复杂,可以使用parse_url然后parse_str将网址分开,然后将值为myquery的密钥string添加到数组中第二个函数返回 - 然后再次将它们全部重新组合在一起,使用http_build_query作为新的查询字符串部分。

答案 2 :(得分:1)

一些意大利面条代码:

echo addToUrl('http://example.com/page/','myquery', 'string').'<br>';
echo addToUrl('http://example.com/page','myquery', 'string').'<br>';
echo addToUrl('http://example.com/page/wut/?aaa=2','myquery', 'string').'<br>';
echo addToUrl('http://example.com?p=page','myquery', 'string');

function addToUrl($url, $var, $val){
    $array = parse_url($url);
    if(isset($array['query'])){
        parse_str($array['query'], $values);
    }
    $values[$var] = $val;
    unset($array['query']);

    $options = '';$c = count($values) - 1;
    $i=0;
    foreach($values as $k => $v){
        if($i == $c){
            $options .= $k.'='.$v;
        }else{
            $options .= $k.'='.$v.'&';
        }
        $i++;
    }

    $return = $array['scheme'].'://'.$array['host'].(isset($array['path']) ? $array['path']: '') . '?' . $options;
    return $return;
}

结果:

http://example.com/page/?myquery=string
http://example.com/page?myquery=string
http://example.com/page/wut/?aaa=2&myquery=string
http://example.com?p=page&myquery=string

答案 3 :(得分:0)

您应该尝试使用http_build_query()功能,我认为这正是您所寻找的,也可能是parse_str()