0

我想向 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解释和Passerby代码。Hamza还有另一个函数,但我想最好使用 PHP 函数并且代码更简洁/更短。

4

4 回答 4

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

现场演示

于 2013-04-15T11:28:43.253 回答
1

我想知道是否有标准、库或通用方法可以做到这一点。我正在使用 PHP。

取决于您希望它的故障安全程度(因此更复杂)。

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

如果你想让它更复杂,你可以使用parse_urlthen将 URL 分开,然后将带有值parse_str的键添加到第二个函数返回的数组中——然后将它们重新组合在一起,用于新的查询字符串部分。myquerystringhttp_build_query

于 2013-04-15T11:24:28.133 回答
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
于 2013-04-15T11:41:58.893 回答
0

你应该试试这个http_build_query()功能,我认为这就是你想要的,也许还有一点parse_str()

于 2013-04-15T11:24:58.233 回答