目前,我page1.php
被输入到 URL 栏中,其中包含变量状态和 URL 中的字符串,如下所示http://example.com/page1.php?status=red
.当用户单击 Enter 时,它会重定向到 page2.php
并生成更多变量,并在 url 末尾添加另一个&status=
,如下所示http://example.com/page2.php?status=red&varone=1&vartwo=2&status=green
与其在 URL 中有 2 个状态变量,我想完全删除第一个 1,这样它就只剩下 &status=green
在最后
这是我为标头重定向准备的代码:
$query = $_SERVER["QUERY_STRING"];
header("Location: page2.php" . $query . "&status=" . $currentstatus);
如果可能的话,我宁愿删除第一个?status=
,因为我确实希望在 url 的最后&status=
如果要
从查询字符串中删除第一次出现的状态,则最好将其从以前的URL中删除。
$query = $_SERVER["QUERY_STRING"];
$new_query = str_replace($_REQUEST['status'], $currentstatus, $query); // New query with $currentstatus as status value
header("Location: page2.php?" . $new_query);
试试 status 是唯一的参数:
$query= str_replace("status=".$_REQUEST["status"],"", $query);
或者如果还有以下更多:
$query= str_replace("status=".$_REQUEST["status"]."&","", $query);
preg_replace
选项:(注意,如果参数尚不存在,这将不起作用)
$query = $_SERVER["QUERY_STRING"];
$query= preg_replace("/status=".$_REQUEST["status"]."(&)?/","status=$currentstatus$1", $query);
header("Location: page2.php" . $query);
parse_str
选项:(即使参数尚不存在,这也将起作用)
parse_str($_SERVER['QUERY_STRING'], $query);
$query['status'] = $currentstatus;
header("Location: page2.php" . http_build_query($query_string));
用户parse_str
和http_build_query
。 请尝试以下解决方案:
$query_string = 'status=red&varone=1&vartwo=2';
$current_status = 'newstatus';
//parse current query string
parse_str($query_string, $q_arr);
//replace new status
$q_arr['status'] = $current_status;
//generate new query string
$new_query_string = http_build_query($q_arr);
输出
status=newstatus&varone=1&vartwo=2
无需将
查询字符串视为字符串。你在PHP中得到的变量是一个不错的数组,所以使用它!
$_GET["status"] = $currentstatus;
$query = http_build_query($_GET);
header("Location: page2.php?$query");