向随机URL添加查询字符串


Adding a query string to a random URL

我想向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

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

我想知道是否有一个标准,库或通用的方法来做到这一点。我用的是PHP

编辑:我正在使用Cbroe解释和路人代码。Hamza有另一个函数,但我想最好使用PHP函数,也有更简洁的代码。

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));

现场演示

我想知道是否有一个标准,库或通用的方法来做到这一点。我用的是PHP

取决于你希望它有多安全,从而更复杂。

最简单的方法是查找URL中是否有? -如果有,则附加&myquery=string,否则附加?myquery=string。这应该可以很好地覆盖大多数符合标准的url。

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

一些乱七八糟的代码:

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

您应该尝试http_build_query()函数,我认为这就是您正在寻找的,也许还有一点parse_str()