在分页时是否有任何方法可以保留我的GET参数。
我的问题是我有几个不同的网址,即
questions.php?sort=votes&author_id=1&page=3
index.php?sort=answers&style=question&page=4
在我的分页课程中,我应该创建一个指向页面的链接,但页面上有不同的页码,但仍然保留了网址的其他部分?
答案 0 :(得分:6)
您可以使用 http_build_query() 。它比手动删除旧参数更清晰。
应该可以传递一个由$ _GET和新值组成的合并数组,并获得一个干净的URL。
$new_data = array("currentpage" => "mypage.html");
$full_data = array_merge($_GET, $new_data); // New data will overwrite old entry
$url = http_build_query($full_data);
答案 1 :(得分:5)
简而言之,您只需解析URL,然后在最后添加参数或替换它(如果已存在)。
$parts = parse_url($url) + array('query' => array());
parse_str($parts['query'], $query);
$query['page'] = $page;
$parts['query'] = http_build_str($query);
$newUrl = http_build_url($parts);
此示例代码需要PHP HTTP module和http_build_url
http_build_str
。后者可以替换为http_build_query
,对于第一个,可以存在PHP用户空间实现,以防您没有安装模块。
另一种方法是使用Net_URL2
包,它提供了各种URL操作的接口:
$op = new Net_URL2($url);
$op->setQueryVariable('page', $page);
$newUrl = (string) $op;
它更具灵活性和表现力。
答案 2 :(得分:4)
如果你想编写自己的函数来做类似http_build_query的事情,或者你需要根据某种原因自定义它的操作:
<?php
function add_edit_gets($parameter, $value) {
$params = array();
$output = "?";
$firstRun = true;
foreach($_GET as $key=>$val) {
if($key != $parameter) {
if(!$firstRun) {
$output .= "&";
} else {
$firstRun = false;
}
$output .= $key."=".urlencode($val);
}
}
if(!$firstRun)
$output .= "&";
$output .= $parameter."=".urlencode($value);
return htmlentities($output);
}
?>
然后你可以写出你的链接:
<a href="<?php echo add_edit_gets("page", "2"); ?>">Click to go to page 2</a>
答案 3 :(得分:0)
如何在会话中存储page
参数,这样您就不必修改每个页面网址了?