我将过滤器添加到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'); }
?
答案 0 :(得分:1)
您可以使用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()函数,如果您不能像this问题那样使用PECL替代方案。
答案 1 :(得分:0)
您无法从GET请求中删除变量,只需重定向到没有此变量的地址。
if (isset($_GET['color'])) {
header ('Location: http://www.example.com/list?size=' . $_GET['size']);
exit;
}
注意:
在网址http://example.com/list?size=3&color=7&color=1
中只有一个$_GET['color']
,而不是两个。只有其中一人被带走。您可以检查,$_GET['key']
是否存在,但您不知道您的网址中有多少
答案 2 :(得分:0)
所以,假设我正确理解你的问题。
您的情况如下:
- 您正在构建作为链接放入网页的网址(<a href=
)
- 您正在使用GET语法/标记(URL?key = value&amp; 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,这将使您的生活更轻松。
注意:假设链接是硬编码的,可能会修改页面,&amp;该页面是硬编码标记,通过在PHP&amp;中打开页面作为文件。做出适当的改变。这是我的看法,这将是一个令人头痛的问题,不值得花时间和努力和它仍然需要页面重新加载(你不能自己触发)。
<强>摘要强>
如果你用PHP编写动态页面应该不是什么大问题,只需要创建一个结构(类或数组)和一个方法/函数来将该结构写成GET字符串。然后可以在生成页面之前根据您的需要修改结构。
但是,如果您正在处理静态页面,我建议使用JavaScript(创建js结构以允许用户动态选择过滤器或利用AJAX使用PHP构建新的GET参数列表并将其发送回javascript)。
(注意:我被提醒说,我已经做了一些事情,通过在显示给用户[使用PHP]之前拦截它们来实时修改现有页面的链接,但是我的双手被绑在其他区域,我会如果您有选择则不推荐它并且应该注意这仍然需要重新加载......)
答案 3 :(得分:0)
尝试在后端脚本中执行以下操作:
$originalValues=array();
foreach($_GET as $filter=>$value)
{
if(empty($originalValues[$filter]))
$originalValues[$filter] = $value;
}
这可能会做你想要的,但感觉很乱。你可能想要修改你的逻辑。
祝你好运!