用新值PHP替换查询字符串中的值

时间:2012-07-26 09:19:22

标签: php function

我有一个网址,如果他们在那里我想要替换值,但如果他们不存在则添加。

我的网址例如是:http://www.example.com/online/admin/users?p=Name&sort=user&dir=desc我希望编写一个脚本,如果已存在,则会再次在URL中写出查询,如果不存在则添加。我想把它写成“a”标签但是我选择了不同的值进行排序和dir

我在名为Add Querystring Variable

的网站上找到了一些代码
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>'; ?>

但是这个空白了。还有更多想法吗?感谢所有输入到目前为止的人。

2 个答案:

答案 0 :(得分:0)

我建议您使用parse_urlparse_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>'; 
?>

测试

答案 1 :(得分:0)

使用目前为止所做的,您可能需要稍微修改一下:

$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>';