我想在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函数,并且代码更清晰/更短。
答案 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));
答案 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()
。