我想向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_url
和parse_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()
。