【问题标题】:PHP: How to remove duplicate arguments in a url?PHP:如何删除 url 中的重复参数?
【发布时间】:2011-12-19 13:42:26
【问题描述】:

我正在尝试为 opencart 编写产品过滤器扩展。

我为 url 分配大小、颜色等选项,如下所示:

index.php?route=product/category&path=59_63&size=57&color=black

问题是当我点击页面上的另一种颜色时,链接变成这样:

index.php?route=product/category&path=59_63&size=57&color=black&color=brown

如您所见,有重复的颜色参数,它会弄乱类别列表。 如果有,如何删除相同的参数?

原来opencart的link builder函数:

public function link($route, $args = '', $connection = 'NONSSL') {
    if ($connection ==  'NONSSL') {
        $url = $this->url;  
    } else {
        $url = $this->ssl;  
    }

    $url .= 'index.php?route=' . $route;

    if ($args) {
        $url .= str_replace('&', '&', '&' . ltrim($args, '&')); 
    }

    return $this->rewrite($url);
}

【问题讨论】:

    标签: php url arguments opencart


    【解决方案1】:

    这实际上与 opencart 的链接构建器无关,它是在此之外完成的,以免进行任何核心更改。当您在控制器代码中为您的类别使用 $this->url->link 时,您需要设置该值。当您获取将用于过滤器的所有颜色时,请务必取消设置传递给链接第二个参数的颜色属性

    【讨论】:

      【解决方案2】:

      没有足够的信息来提供正确的答案,但我会猜测一下。

      问题似乎出在$args。您似乎从 URL 中获取了 $args 并将您的新颜色参数附加到它。

      如果 URL 是 index.php?route=product/category&path=59_63&size=57&color=black,那么 $argspath=59_63&size=57&color=black

      您将color=brown$args becomes path=59_63&size=57&color=black&color=brown 附加到它。

      如果是这种情况,你可以这样做:

      parse_str($args,$url_params);
      $url_params['color'] = 'brown'; //-- overwrites color=black with color=brown
      $args = http_build_query($url_params);
      

      然后将 $args 传递给您的 link() 函数。

      【讨论】:

        【解决方案3】:

        您不必删除重复的参数。
        你不必添加它。

        使用http_build_query() 创建查询字符串

        【讨论】:

        • 我不明白我应该怎么做,我已将原始 opencart 的链接构建器功能添加到主消息中......
        猜你喜欢
        • 1970-01-01
        • 2010-12-19
        • 2013-12-14
        • 1970-01-01
        • 2013-06-01
        • 2021-04-25
        • 2018-08-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多