PHP添加/修改查询字符串参数和获取URL

13
如何将用户重定向回相同的页面,但具有现有查询字符串并添加/修改一个名为“page”的查询字符串? 我认为一种方法是:
  1. $_SERVER['QUERY_STRING'] 解析成数组
  2. 如果数组中存在 page,则修改该值,否则添加它
  3. 使用 http_build_query 获取要附加到 $_SERVER['PHP_SELF'] 的查询字符串
但是否有更好/更直接的方法?
2个回答

27

仅为确保您知道,使用 parse_str 来解析查询字符串:

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

哦,我看过那个,但错过了可以传递数组的部分。 - JM at Work
当然会让事情变得更容易! - Jim Rubenstein
1
注意:http_build_query 需要 PECL 库 pecl_http >= 0.21.0。 - Jess Telford

6

参考Jim Rubinstein的答案,我整理出了一段实用的函数,现在分享给大家:

  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'))?>">特性</a>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接