【问题标题】:Remove a certain variable from a query string从查询字符串中删除某个变量
【发布时间】:2011-07-28 18:29:11
【问题描述】:

如何从查询字符串中删除某个变量?假设我有一个查询字符串

$query_string = "first=val1&second=val2&third=val3";

function removevar($var, $query_string) {
    return preg_replace("/(".$var."=[^&]*(&))/i","",$query_string);
}

echo removevar("first",$query_string); // ok
echo removevar("second",$query_string); // ok
echo removevar("third",$query_string); // doesn't change the string because third doesn't have a trailing &

如何解决这个问题,以便以稳健的方式从查询字符串中删除变量?可能有人已经有了一个函数来处理更复杂的字符串的特殊情况。

所以我必须匹配 & 或字符串结尾 ($) 但我不知道如何将其转换为正则表达式。

【问题讨论】:

  • 使用 parse_str 和 unset 怎么样?
  • 为什么要这样做,你已经有了 $_GET 数组,你可以只取你需要的参数,如果你真的想删除一个,只需使用没有这个的数组重建字符串...
  • 为了使其更健壮,我会先通过preg_quote($var,'/') 运行$var,以确保它是“正则表达式安全的”。

标签: php regex pcre


【解决方案1】:
$query_string = "first=val1&second=val2&third=val3";

function removevar($var, $query_string) {
    return preg_replace("/(".$var."=[^&]*(&|$))/i","",$query_string);
}

echo removevar("first",$query_string); // ok
echo removevar("second",$query_string); // ok
echo removevar("third",$query_string); // ok

这应该可以解决问题。

【讨论】:

    【解决方案2】:

    您不一定需要正则表达式,因为 PHP 确实具有可以解析和构建查询字符串的函数(分别为 parse_strhttp_build_query):

    function removevar($var, $query_string) {
        parse_str($query_string, $args);
        unset($args[$var]);
        return http_build_query($args);
    }
    

    请注意,在使用这些函数之前,您需要对 HTML 字符引用进行解码。

    【讨论】:

    • 感谢所有建议 parse_str 和 http_build_query 的人。似乎 PHP 具有所有功能。我将来会使用它,但由于我无法进入的原因,无论如何我都需要正则表达式。
    【解决方案3】:

    你可能会有更多的运气使用:

    1. html_entity_decode 获取“正常”查询字符串。
    2. parse_str 将查询字符串放入数组中。
    3. unset 该数组中所需的键。
    4. 使用http_build_query 重建字符串。
    5. 致电htmlspecialchars 以将& 回复至&

    不如正则表达式路线简洁,但不易出错。

    【讨论】:

      【解决方案4】:
      <?php
      $query_string = "first=val1&amp;second=val2&amp;third=val3";
      parse_str($query_string, $output);
      
      function removevar($var, $output_array) {
        if (in_array($var, $output_array)) {
          unset($output_array[$var]);
        }
      
        return http_build_query($output_array, '', '&amp;');
      }
      
      echo removevar("first", $output);
      echo removevar("third", $output);
      ?>
      

      通常对于这样的涉及查询字符串的代码,最好使用内置的 PHP 函数而不是正则表达式语法/公式。这就是我所做的,代码的主要部分包括以下PHP内置函数:-

      希望对你有帮助。

      【讨论】:

        【解决方案5】:
        function removevar($var, $query_string) {
            $query_string = preg_replace("#$var=([^&]+)#is", "", $query_string);
            return trim($query_string, "&amp;");
        }
        

        【讨论】:

          【解决方案6】:

          有一些函数可以直接处理查询字符串。

          function removevar ($var, $query_string) {
            $array = array();
            parse_str(html_entity_decode($query_string), $array);
            unset($array[$var]);
            return html_entities(http_build_query($array);
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-01-26
            • 1970-01-01
            • 2015-11-28
            • 2021-12-08
            • 2011-02-02
            • 1970-01-01
            相关资源
            最近更新 更多