Расширяясь по моему первоначальному вопросу здесь: теперь я хотел бы удалить более 1 переменной из строки запроса.
Например, я хочу удалить переменные bar1
& bar2
из строки запроса. Я пробовал следующий код:
echo parseQueryString("http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],"bar2","bar1");
Но это не удаляет обе переменные, только bar2
.
Любая помощь оценивается.
Спасибо,
Matt
Вам будет нужно что-то вроде
echo parseQueryString(parseQueryString("http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],"bar2"),"bar1");
В качестве альтернативы, поскольку я предполагаю, что parseQueryString – это функция, которую вы определили, вы можете изменить ее, чтобы она принимала аргумент массива и циклы над массивом.
я хотел бы использовать
parse_str($_SERVER["QUERY_STRING"], $array);
разделить строку запроса
unset($array["bar1"]);
с unset($array["bar1"]);
удалить ненужные переменные
http_build_query($array);
склеить строку запроса обратно
Я создал новую функцию, которая работает с несколькими параметрами.
<?php function parseQueryString($url,$remove_arr) { $infos=parse_url($url); $str=$infos["query"]; $op = array(); $pairs = explode("&", $str); foreach ($pairs as $pair) { list($k, $v) = array_map("urldecode", explode("=", $pair)); $op[$k] = $v; } foreach($remove_arr as $remove){ if(isset($op[$remove])){ unset($op[$remove]); } } return str_replace($str,http_build_query($op),$url); } echo parseQueryString("http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],array("bar2","bar1")); ?>
о<?php function parseQueryString($url,$remove_arr) { $infos=parse_url($url); $str=$infos["query"]; $op = array(); $pairs = explode("&", $str); foreach ($pairs as $pair) { list($k, $v) = array_map("urldecode", explode("=", $pair)); $op[$k] = $v; } foreach($remove_arr as $remove){ if(isset($op[$remove])){ unset($op[$remove]); } } return str_replace($str,http_build_query($op),$url); } echo parseQueryString("http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],array("bar2","bar1")); ?>
о<?php function parseQueryString($url,$remove_arr) { $infos=parse_url($url); $str=$infos["query"]; $op = array(); $pairs = explode("&", $str); foreach ($pairs as $pair) { list($k, $v) = array_map("urldecode", explode("=", $pair)); $op[$k] = $v; } foreach($remove_arr as $remove){ if(isset($op[$remove])){ unset($op[$remove]); } } return str_replace($str,http_build_query($op),$url); } echo parseQueryString("http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],array("bar2","bar1")); ?>
с<?php function parseQueryString($url,$remove_arr) { $infos=parse_url($url); $str=$infos["query"]; $op = array(); $pairs = explode("&", $str); foreach ($pairs as $pair) { list($k, $v) = array_map("urldecode", explode("=", $pair)); $op[$k] = $v; } foreach($remove_arr as $remove){ if(isset($op[$remove])){ unset($op[$remove]); } } return str_replace($str,http_build_query($op),$url); } echo parseQueryString("http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],array("bar2","bar1")); ?>
Я не думаю, что функция parseQueryString
будет работать для строк запроса с элементами массива, такими как &bar[]=5&bar[]=12
и т. Д. Я думаю, что все, кроме одного, будут удалены из результата.