我有以下方法:
utf_encode/utf_decode
我用两个参数调用它 - 要更改的查询参数的名称,以及它将更改为的值。如果此值为null,我想删除此查询参数。
我该怎么做?
答案 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
不在数组的副本上运行。
为了能够直接修改循环中的数组元素,在$ value之前加上&amp ;.在这种情况下,该值将通过引用分配。
然后使用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>";