如何删除任何给定的$_GET变量从URL与PHP


How to remove any given $_GET variable from URL with PHP?

我将过滤器与GET变量的链接,如下所示:http://example.com/list?size=3&color=7,我想从URL中删除任何给定的过滤器参数,每当选择该特定过滤器的不同值时,以便它不会,例如,重复color过滤器,如:

http://example.com/list?size=3&color=7&color=1

如何if(isset($_GET['color'])) { removeGet('color'); } ?

您可以使用parse_url和parse_str提取参数,如下例所示:

$href = 'http://example.com/list?size=3&color=7';
$query = parse_url( $href, PHP_URL_QUERY );
parse_str( $query, $params );
// set custom paramerets
$params['color'] = 1;
// build query string
$query = http_build_query( $params );
// build url
echo explode( '?', $href )[0] . '?' . $query;

本例中使用explode()提取查询字符串前的url部分,使用http_build_query生成查询字符串,也可以使用PECL的http_build_url()函数,如果不能使用PECL使用替代方法,如本题中

你不能从GET请求中删除变量,只能重定向到没有这个变量的地址

if (isset($_GET['color'])) {
    header ('Location: http://www.example.com/list?size=' . $_GET['size']);
    exit;
}

注意:
URL http://example.com/list?size=3&color=7&color=1只是一个$_GET['color'],而不是两个。只有一个被占用了。你可以检查$_GET['key']是否存在,但你不知道URL中有多少个

那么,假设我正确理解了你的问题。
您的情况如下:
-你正在建立url,你把一个网页作为链接(<a href=)
-您正在使用GET语法/标记(URL?key=value&anotherkey=anothervalue)作为一种方式来分配某种类型的过滤器,然后当用户单击给定链接时接收到该过滤器

您想要的是能够修改GET参数列表(http://example.com/list?size=3&color=7&color=1)中的一个项,这样您只有一个筛选键,但是您可以修改筛选值。因此,而不是上面你会开始:(http://example.com/list?size=3&color=7),但改变颜色"过滤器"后,你会有http://example.com/list?size=3&color=1)。

另外,你还需要在PHP中执行上述操作(与JavaScript等相反)。

有很多方法可以实现改变,最有效的方法取决于你已经在做什么,最有可能。
首先,如果要动态生成包含过滤器文本链接的HTML标记(听起来就是这样),那么最合理的做法是创建一个PHP数组来保存GET参数,然后编写一个函数将这些参数转换为GET字符串。
当用户刷新页面时,将出现新的过滤器(因为,如果动态生成HTML,则需要服务器请求来重新构建页面)。
但是,如果您想要更新活动页面上的链接url,而不需要使用JavaScript重新加载,这将使您的工作更轻松。
注意:如果链接是硬编码的,那么很有可能修改页面,&该页面是硬编码标记,通过在PHP &进行适当的更改。我的看法是,这将是一个令人头疼的问题,不值得花费时间。而且它仍然需要重新加载页面(你不能自己触发)。


如果你正在用PHP编写动态页面,这应该不是什么大问题,只需要创建一个结构(类或数组)和一个方法/函数来将该结构作为GET字符串写出来。在生成页面之前,可以根据需要修改结构。
但是,如果您处理的是静态页面,我建议使用JavaScript(创建js结构以允许用户动态选择过滤器,或者使用AJAX用PHP构建新的GET参数列表并将其发送回JavaScript)。(注意:我被提醒,我已经做了一些事情,通过在现有页面显示给用户之前拦截它们来修改现有页面的动态链接[使用PHP],但我的手在其他领域被绑住了,如果你有选择,我不会推荐它,应该注意的是,这仍然需要重新加载…)

尝试在您的后端脚本中这样做:

$originalValues=array();
foreach($_GET as $filter=>$value)
{
   if(empty($originalValues[$filter]))
     $originalValues[$filter] = $value;
}

这可能是你想要的,但感觉很粗糙。你可能需要修改一下你的逻辑。

祝你好运!

就放一个链接/按钮把用户送到索引…这样的。

<a class="btn btn-primary m-1" href="http:yoururl/index.php" role="button">Limpar</a>