PHP为现有查询字符串添加值

时间:2014-08-03 14:42:46

标签: php query-string duplicate-removal

问题在于:

我有一个基于查询字符串的页面,如:

localhost\sandbox\hotsite.php?id=14665&open=hot_promocoes&titulo=127121

我正在为这个CMS开发一个分页功能,所以我想为我做一些事情:

localhost\sandbox\hotsite.php?id=14665&open=hot_promocoes&titulo=127121&pg=1

现在,我已经创建了一个代码,它接受整个网址并添加pg = 1,但是当我这样做并点击一些新页面链接时,例如第3页,链接如下所示:< / p>

localhost\sandbox\hotsite.php?id=14665&open=hot_promocoes&titulo=127121&pg=1&pg=3.

当我点击页面链接时,它会永远重复(titulo=127121&pg=1&pg=3&pg=2&pg=4&pg=8&pg=9&pg=2&pg=3),当它发生时,我的分页代码会变得疯狂,如果我继续点击我的代码就疯了。我坚持这一点,我无法想出办法。

附加信息:每个页面都有不同的结构,所以

  • 如果内容是照片,则链接如下所示:

    本地主机\沙箱\ hotsite.php ID = 14665&安培;打开= hot_albums&安培; TITULO = 127991

  • 如果内容是视频,则链接如下所示:

    本地主机\沙箱\ hotsite.php ID = 14665&安培;开放=视频&安培;专辑= 1348&安培; TITULO = 11121

所以我不能使用php中的构建字符串函数构建任何东西,导致我知道的唯一查询字符串值是id,它将在所有页面上,但其他页面不是常量。

所以,我需要你的帮助:)。

        // START OF FUNCTION
        function stringadd($query_text) {

            $query = $query_text;

                $pound = "";
                $poundPos = -1;

                    //Is there a #?
                    if ( ( $poundPos = strpos( $url_atual, "#" ) ) !== false )
                        {
                            $pound = substr( $url_atual, $poundPos );
                            $url_atual = substr( $url_atual, 0, $poundPos );
                        }

                $separator = (parse_url($url_atual, PHP_URL_QUERY) == NULL) ? '?' : '&';
                $url_atual .= $separator . $query . $pound;

          echo "".$url_atual;
        }
      // here is what i do to execute the function:



<?php echo stringadd('pg=').$total_paginas ;?>  

1 个答案:

答案 0 :(得分:3)

parse_str函数将为您提供查询字符串值中的一组键值对。处理数组会使事情更清晰,因为现有的键本身会被覆盖而不是附加。

function setQueryString($url, $key, $val){
    $pUrl = parse_url($url);
    if(isset($pUrl['query']))
        parse_str($pUrl['query'], $pUrl['query']);
    else $pUrl['query'] = [];
    $pUrl['query'][$key] = $val;

    $scheme = isset($pUrl['scheme']) ? $pUrl['scheme'].'://' : '';
    $host = isset($pUrl['host']) ? $pUrl['host'] : '';
    $path = isset($pUrl['path']) ? $pUrl['path'] : '';
    $path = count($pUrl['query'])>0 ? $path.'?' : $path;

    return $scheme . $host . $path . http_build_query($pUrl['query']);
}

fiddle