替换查询中的变量值

时间:2016-04-22 03:18:20

标签: php

目前我已将page1.php输入到具有变量状态的URL栏中,并在URL中输入一个字符串,如http://example.com/page1.php?status=red。当用户点击Enter时,它会重定向到page2.php并生成更多变量,并在网址末尾添加另一个&status=,如http://example.com/page2.php?status=red&varone=1&vartwo=2&status=green

我没有在URL中有2个状态变量,而是想完全删除第1个1,所以最后只留下&status=green

以下是标题重定向的代码:

$query = $_SERVER["QUERY_STRING"];
header("Location: page2.php" . $query . "&status=" . $currentstatus);

如果可能的话,我宁愿删除第一个?status=,因为我确实希望在网址的最后添加&status=

6 个答案:

答案 0 :(得分:0)

如果要从查询字符串中删除第一次出现的状态,则最好将其从以前的URL中删除。

答案 1 :(得分:0)

尝试状态是唯一参数:

 $query= str_replace("status=".$_REQUEST["status"],"", $query);

或者如果还有更多:

$query= str_replace("status=".$_REQUEST["status"]."&","", $query);

答案 2 :(得分:0)

$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);

答案 3 :(得分:0)

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));

答案 4 :(得分:0)

用户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

答案 5 :(得分:0)

无需将查询字符串视为字符串。你将PHP中的变量作为一个很好的数组,所以使用它!

$_GET["status"] = $currentstatus;
$query = http_build_query($_GET);
header("Location: page2.php?$query");