2011-05-05 71 views
7

如何使用现有的查询字符串将用户重定向到同一页面,但添加/修改为“页面”1。PHP添加/修改查询字符串参数并获取URL

我想1层的方法是:

  1. 解析$_SERVER['QUERY_STRING']到一个数组
  2. 是否存在数组中page,修改的值,否则将其添加
  3. 使用http_build_query得到查询字符串追加到$_SERVER['PHP_SELF']

但是有没有更好/更直接的方法?

回答

21

只是为了确保你了解它,使用parse_str解析您的查询字符串:

<?php 
parse_str($_SERVER['QUERY_STRING'], $query_string); 
$query_string['page'] = basename($_SERVER['PHP_SELF']); 
$rdr_str = http_build_query($query_string); 
+0

哦我看这一点,但错过了在哪里可以传递数组的部分 – 2011-05-05 05:43:59

+0

肯定会让事情变得更简单! – 2011-05-05 05:44:40

+1

注:对于'http_build_query',需要PECL库pecl_http> = 0.21.0。 – 2012-02-10 00:30:05

4

使用吉姆·鲁宾斯坦的回答,我想出了,我想我可能会共用一个有用的功能:

function modQuery($add_to, $rem_from = array(), $clear_all = false){ 
    if ($clear_all){ 
    $query_string = array(); 
    }else{ 
    parse_str($_SERVER['QUERY_STRING'], $query_string); 
    } 
    if (!is_array($add_to)){ $add_to = array(); } 
    $query_string = array_merge($query_string, $add_to); 
    if (!is_array($rem_from)){ $rem_from = array($rem_from); } 
    foreach($rem_from as $key){ 
    unset($query_string[$key]); 
    } 
    return http_build_query($query_string); 
    } 

例如: <a href="?<?=modQuery(array('kind'=>'feature'))?>">Feature</a>