【发布时间】:2011-05-05 04:55:41
【问题描述】:
如何将用户重定向回具有现有查询字符串的同一页面,但添加/修改了 1 个,如“页面”。
我想一种方法是:
- 将
$_SERVER['QUERY_STRING']解析成一个数组 - 如果数组中存在
page,则修改值,否则添加 - 使用
http_build_query获取要附加到$_SERVER['PHP_SELF']的查询字符串
但是有更好/更直接的方法吗?
【问题讨论】:
标签: php get query-string
如何将用户重定向回具有现有查询字符串的同一页面,但添加/修改了 1 个,如“页面”。
我想一种方法是:
$_SERVER['QUERY_STRING']解析成一个数组page,则修改值,否则添加http_build_query 获取要附加到$_SERVER['PHP_SELF'] 的查询字符串
但是有更好/更直接的方法吗?
【问题讨论】:
标签: php get query-string
为了确保您了解它,请使用parse_str 解析您的查询字符串:
<?php
parse_str($_SERVER['QUERY_STRING'], $query_string);
$query_string['page'] = basename($_SERVER['PHP_SELF']);
$rdr_str = http_build_query($query_string);
【讨论】:
http_build_query 需要 PECL 库 pecl_http >= 0.21.0。
使用 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'))?>">Feature</a>
【讨论】: