2010-11-21 2 views
1

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

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

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

Но это не снимает обе переменные, только bar2.

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

Спасибо,

Matt

ответ

2

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

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

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

+0

Это сработало отлично, спасибо большое! – Matt

3

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

  • parse_str($_SERVER["QUERY_STRING"], $array); разобрать строку запроса,

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

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

+0

Спасибо за ваш ответ! – Matt

1

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

<?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

Это замечательно, также работает, спасибо. – Matt

0

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

+0

Добро пожаловать в StackOverflow и спасибо за публикацию. К сожалению, это не отвечает на вопрос. См. [Как ответить] (http://stackoverflow.com/questions/how-to-answer). –

Смежные вопросы