Удалить значение из строки запроса, часть 2 - PullRequest
1 голос
/ 21 ноября 2010

Расширение моего исходного вопроса здесь: Теперь я хотел бы удалить более 1 переменной из строки запроса.

Например, я хочу удалить переменные bar1 & bar2 из строки запроса. Я пробовал следующий код:

echo parseQueryString("http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],"bar2","bar1");

Но это не удаляет обе переменные, только bar2.

Любая помощь приветствуется.

Спасибо,

Мэтт

Ответы [ 4 ]

3 голосов
/ 21 ноября 2010

Я бы использовал

  • parse_str($_SERVER["QUERY_STRING"], $array); для разбора строки запроса

  • unset($array["bar1"]); для удаления нежелательных переменных

  • http_build_query($array);, чтобы склеить строку запроса вместе

2 голосов
/ 21 ноября 2010

Вы будете хотеть что-то вроде

echo parseQueryString(parseQueryString("http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],"bar2"),"bar1");

В качестве альтернативы, поскольку я предполагаю, что parseQueryString - это определенная вами функция, вы можете изменить ее, чтобы она принимала аргумент массива и перебирала его по массиву.

1 голос
/ 21 ноября 2010

Я создал новую функцию, которая работает с несколькими параметрами.

<?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"));
?>
0 голосов
/ 24 июня 2011

Не думаю, что функция parseQueryString будет работать для строк запроса с компонентами массива, такими как &bar[]=5&bar[]=12 и т. Д. Я думаю, что все, кроме одного, будут исключены из результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...