从查询字符串第2部分中删除值

时间:2010-11-21 13:33:26

标签: php html xhtml

扩展我的原始问题here:我现在想从查询字符串中删除多个变量。

例如,我想删除变量bar1&来自查询字符串的bar2。我尝试了以下代码:

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

但这并不会删除这两个变量,只会删除bar2

任何帮助表示感谢。

谢谢,

马特

4 个答案:

答案 0 :(得分:3)

我会用

  • parse_str($_SERVER["QUERY_STRING"], $array);拆分查询字符串

  • unset($array["bar1"]);删除不需要的变量

  • http_build_query($array);将查询字符串粘合在一起

答案 1 :(得分:2)

你会想要像

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

或者,因为我假设parseQueryString是您定义的函数,所以您可以更改它,以便接受数组参数并在数组上循环。

答案 2 :(得分: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"));
?>

答案 3 :(得分:0)

我认为parseQueryString函数不适用于包含&bar[]=5&bar[]=12等数组组件的查询字符串。我认为除结果之外的所有字符都会从结果中删除。