替换查询中变量的值


Replace Value of Variable in Query

目前,我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_strhttp_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");