我有一个URL,如果有值,我想替换它,但如果没有,我想添加它。
例如,我的URL是:http://www.example.com/online/admin/users?p=Name&sort=user&dir=desc
,我想写一个脚本,如果URL已经存在,它将再次在URL中写出查询,如果不存在,则添加它。我想把它写在一个"a"标签上,但我为排序和目录选择了不同的值
我在一个名为AddQuerystring变量的网站上找到了一些代码
function add_querystring_var($url, $key, $value) {
$url = preg_replace('/(.*)(?|&)' . $key . '=[^&]+?(&)(.*)/i', '$1$2$4', $url . '&');
$url = substr($url, 0, -1);
if (strpos($url, '?') === false) {
return ($url . '?' . $key . '=' . $value);
} else {
return ($url . '&' . $key . '=' . $value);
}
}
我唯一的问题是我不知道如何使用它来做我想做的事。
这是我迄今为止要使用的代码
add_querystring_var("http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'],"sort","lvl");
add_querystring_var("http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'],"dir","asc");
但我不知道该怎么办,因为这并不能为我写下任何东西。
我知道这会很简单,但我对PHP的这一领域还很陌生D
编辑
迄今为止的代码
$url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
function add_querystring_var($url, $key, $value) {
$urlarray = parse_url($url);
parse_str($urlarray['query'],$queryarray);
$queryarray[$key]=$value;
$queryarray = http_build_query($queryarray);
return http_build_url($url,array('query'=>$queryarray),HTTP_URL_JOIN_QUERY);
}
$url_id=add_querystring_var($url,"sort","lvl");
$url_id=add_querystring_var($url,"dir",$dir);
<?php echo '<a href="'.$url.'">New Anchor</a>'; ?>
但这封信一片空白。还有什么想法吗?感谢大家到目前为止的投入。
我建议使用parse_url和parse_str
function add_querystring_var($url, $key, $value) {
$urlarray = explode('?',$url);
$query = '';
if(isset($urlarray[1]))
$query = $urlarray[1];
parse_str($query,$queryarray);
$queryarray[$key]=$value;
$queryarray = http_build_query($queryarray);
return $urlarray[0].'?'.$queryarray;
}
像这样调用
add_querystring_var("http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'],'sort','id');
或针对您的具体情况
<?php
$url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$url=add_querystring_var($url,"sort","lvl");
$url=add_querystring_var($url,"dir", $dir);
echo '<a href="'.$url.'">New Anchor</a>';
?>
测试
使用到目前为止所获得的内容,您可能需要对其进行如下修改:
$url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
//your add_querystring_var() returns the new url, it doesn't echo it to the screen
$url=add_querystring_var($url,"sort","lvl");
$url=add_querystring_var($url,"dir","asc");
echo '<a href="'.$url.'">New Anchor</a>';