在分页时是否有任何方法可以保留我的GET参数.
我的问题是我有几个不同的网址即
questions.php?sort=votes&author_id=1&page=3
index.php?sort=answers&style=question&page=4
Run Code Online (Sandbox Code Playgroud)
在我的分页课程中,我应该创建一个指向页面的链接,但页面上有不同的页码,但仍保留网址的其他部分?
您可以使用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);
Run Code Online (Sandbox Code Playgroud)
如果您想编写自己的函数来执行类似 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);
}
?>
Run Code Online (Sandbox Code Playgroud)
然后你可以写出你的链接,如:
<a href="<?php echo add_edit_gets("page", "2"); ?>">Click to go to page 2</a>
Run Code Online (Sandbox Code Playgroud)
简而言之,您只需解析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);
Run Code Online (Sandbox Code Playgroud)
此示例代码要求PHP HTTP模块用于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;
Run Code Online (Sandbox Code Playgroud)
它更灵活,更富有表现力.
| 归档时间: |
|
| 查看次数: |
8560 次 |
| 最近记录: |