我有一个软件下载页面,您可以在其中显示不同类别的软件。像统计软件,办公软件,安全软件等。结果可以通过GET过滤,如url.com?type=office
将带您进入办公室软件。
我还有一些链接可以通过操作系统来过滤它
url.com?type=office&os=windows
但我如何拥有像这样的链接<a href="url.com?os=windows">Only Windows</a>
同时保留所有以前的选择,如软件类型,同时不附加网址,避免任何这种情况
url.com?type=office&os=windows&os=windows&os=linux
有什么想法吗?
谢谢!
答案 0 :(得分:2)
我可能先写一个函数[1]:
function buildURL($base, $key, $val)
{
$data = $_GET;
$data[$key] = $val;
return sprintf('%s?%s', $base, http_build_query($data));
}
将当前的$ _GET数组复制到临时数组($data
)中,使用值$key
设置/覆盖数组的$val
值,然后重建并返回URL
然后,对于您要生成的每个链接,您可以使用
<a href="<?= buildURL('url.php', 'os', 'windows'); ?>">Windows Only</a>
无论os
是否已设置(对任何内容)或未设置,上述链接都会生成相同的内容。它还会保留查询字符串中的任何其他键值对。
换句话说:
Current Query String Generated Link url.php => url.php?os=windows url.php?os=linux => url.php?os=windows url.php?type=office => url.php?os=windows&type=office
[1]代码未经测试,但这是一般的想法。
此外,您可以将功能修改为:
function buildURL($base, $overrides)
{
$data = array_merge($_GET, $overrides);
return sprintf('%s?%s', $base, http_build_query($data));
}
然后你会用以下内容调用:
<?= buildURL('url.php', array('os'=>'windows', 'type'=>'office')); ?>
如果您想一次“覆盖”多个键/值对。
或者,您可以使用隐藏表单元素和Javascript的某种组合,但严格的服务器端实现似乎更好。
答案 1 :(得分:1)
您可以像这样创建链接
$type = $os = "";
if(isset($_GET["type"])){
$type = $_GET["type"];
}
if(isset($_GET["os"])){
$os = $_GET["os"];
}
$link = "<a href='url.com?type=$type&os=$os'>Some Text </a>";
echo $link;
答案 2 :(得分:0)
$_SERVER['REQUEST_URI']
将返回附加了所有查询字符串的网址。您可以执行以下操作:
<?
$url = $_SERVER['REQUEST_URI'];
$url = substr($url, strpos($url, "?") + 1);
parse_str($url, $url);
var_dump($url);
?>
这将创建一个充满您的值的数组
array(3) { ["os"]=> string(7) "windows" ["type"]=> string(6) "office" }
等。您可以使用http_build_query根据这些值重建查询。
或者,如果您改用parse_str($url, $url);
,它会为每个查询名称和值设置变量。 (即$os = windows;
)。然后,您可以检查是否已设置并使用案例或if语句相应地构建您的URL。如果您需要帮助,请告诉我。