【问题标题】:Remove blank and duplicate variables from query string in PHP从 PHP 中的查询字符串中删除空白和重复变量
【发布时间】:2013-07-08 08:02:11
【问题描述】:

我正在寻找一个简单的函数,它可以从 PHP 中的查询字符串中删除空白或重复变量。以这个查询字符串为例:

?input=timeline&list=&search=&type=&count=10&keyword=hello&from=&language=en&keyword=&language=en&input=timeline

如您所见,有两个 input=timelinelanguagekeyword 变量出现两次 - 一次设置一次未设置。还有很多变量是空白的——listsearchtype

什么函数可以清理 URL:

?input=timeline&count=10&keyword=hello&from=&language=en

?

我找到了删除查询或某些变量的函数,但没有与上述内容相近的功能——我无法理解这一点。谢谢!

【问题讨论】:

    标签: php string preg-replace


    【解决方案1】:

    我建议简单地利用 PHP 的 parse_str,但正如您所提到的,您有多个相同的键,parse_str 将简单地按照给出的顺序覆盖它们。

    这种方法会优先考虑非空的值而不是空值,并且会消除具有空值的键:

    $vars = explode('&', $_SERVER['QUERY_STRING']);
    
    $final = array();
    
    if(!empty($vars)) {
        foreach($vars as $var) {
            $parts = explode('=', $var);
    
            $key = $parts[0];
            $val = $parts[1];
    
            if(!array_key_exists($key, $final) && !empty($val))
                $final[$key] = $val;
        }
    }
    

    如果您的查询是input=value&input=&another=&another=value&final=,它将产生这个数组:

    [input] => value
    [another] => value
    

    ...然后您可以使用http_build_query($final) 将其形成一个有效的 GET 字符串。

    【讨论】:

      【解决方案2】:

      "?" . http_build_query($_GET) 应该给你你想要的。由于$_GET 是一个关联数组,任何重复的键都将被查询字符串中提供的最后一个值覆盖。

      【讨论】:

      • 我喜欢这个简单的,但不幸的是它不适合我的情况。 http_build_query 确实删除了重复项,但如果查询是 ?test=1&list=hello&list= 输出将是 ?test=1&list= 理想情况下,我想要一个返回最后一个变量的函数,即使重复项是空白的。此外, http_build_query 不会删除空白条目。我需要 URL 尽可能干净。谢谢。
      • http_build_query 只需要一个数组或对象并将其键/属性及其值转换为查询字符串格式的字符串。
      猜你喜欢
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      相关资源
      最近更新 更多