【问题标题】:Remove a value from a querystring Part 2从查询字符串中删除一个值第 2 部分
【发布时间】:2010-11-21 13:33:26
【问题描述】:

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

例如,我想从查询字符串中删除变量bar1bar2。我试过以下代码:

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

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

任何帮助表示赞赏。

谢谢,

马特

【问题讨论】:

    标签: php html xhtml


    【解决方案1】:

    我会用

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

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

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

    【讨论】:

      【解决方案2】:

      你会想要类似的东西

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

      另外,由于我假设 parseQueryString 是您定义的函数,您可以更改它,使其接受数组参数并在数组上循环。

      【讨论】:

        【解决方案3】:

        我创建了一个可以处理多个参数的新函数。

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

        【讨论】:

          【解决方案4】:

          我认为parseQueryString 函数不适用于具有数组组件(例如&amp;bar[]=5&amp;bar[]=12 等)的查询字符串。我认为除了一个之外的所有字符串都会从结果中删除。

          【讨论】:

          • 欢迎来到 StackOverflow 并感谢您的发帖。不幸的是,这并不能真正回答这个问题。请看How to Answer
          猜你喜欢
          • 2018-12-07
          • 2015-06-25
          • 2014-01-26
          • 1970-01-01
          • 1970-01-01
          • 2012-09-23
          • 2012-05-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多