更改查询参数并返回URL

时间:2015-07-21 13:03:13

标签: php

我有以下方法:

utf_encode/utf_decode

我用两个参数调用它 - 要更改的查询参数的名称,以及它将更改为的值。如果此值为null,我想删除此查询参数。

我该怎么做?

3 个答案:

答案 0 :(得分:1)

虽然您的问题的标题是:

,但您不知道该返回什么
  

更改查询参数,返回网址

因此,如果您想要返回URL,请执行以下操作:

return $fullUrl . '?' . http_build_query($slugs);

当然,如果$fullUrl存储没有查询字符串的URL主机和路径(您将手动追加)。

答案 1 :(得分:0)

您必须从$ slugs数组重建参数:

$res = "";
foreach($slugs as $slug)
    $res .= $slug . "&";
$res = substr($res, -1); /// removes the last &
...
//concatenate $res with the other parts of your URL getting them from your 
//parseUrl function, i.e., the http, host, and path parts from url except the 
//PHP_URL_QUERY part. This has already came from the code above.
...
return $res

答案 2 :(得分:0)

只需引用数组,以便foreach不在数组的副本上运行。

foreach

  

为了能够直接修改循环中的数组元素,在$ value之前加上&amp ;.在这种情况下,该值将通过引用分配。

然后使用http_build_query重建您的查询。

http_build_query

  

从提供的关联(或索引)数组生成URL编码的查询字符串。

<?php
function replaceSlug($name, $value)
{
    //$fullUrl = self :: getFullUrl();
    //$queryString = parseUrl($fullUrl, PHP_URL_QUERY);  

    // just faking the query str here. Put the above back in
    // and delete this one.
    $queryString = "foo=bar&baz=boo&boogaloo=";

    $slugs = array();
    parse_str($queryString, $slugs);

    foreach ($slugs as $n => & $v) {
        if ($n == $name ) {
            if (strlen($slugs[$n]) == 0) {
                unset($slugs[$n]);
            } else {
                $slugs[$n] = $value;
            }
        }
    }

    $splitUri = explode('?', $_SERVER['REQUEST_URI'], 2);

    return 'http://' . $_SERVER['HTTP_HOST'] . $splitUri[0] 
        . "?" . http_build_query($slugs); // returns full url with a new query string
}

$result = replaceSlug('foo', 'oof');
echo "<pre>";
var_dump($result);
echo "</pre>";
$result = replaceSlug('boogaloo', 'oolagoob');
echo "<pre>";
var_dump($result);
echo "</pre>";