我正在创建一些数据的pagging.例如,我有一个页面:
http://example.com/news.php?type=bla&smth=bla
Run Code Online (Sandbox Code Playgroud)
我有一个新闻列表,其中包含指向其他页面的链接.链接到第一页是:
http://example.com/news.php?type=bla&smth=bla&page=1
这是脚本,它创建页面链接:
print '<a href="?'.$_SERVER['QUERY_STRING'].'&page=1"><<</a>';
Run Code Online (Sandbox Code Playgroud)
但在点击其他页面后,链接URL非常大,看起来像:
http://example.com/news.php?type=bla&smth=bla&page=1&page=2&page=1&page=3
Run Code Online (Sandbox Code Playgroud)
我怎么能改变呢?
您只需将新的参数附加到旧的参数上,但如果已经存在,则不要替换它.所以你宁愿需要将旧的查询字符串与新的查询字符串合并:
// either by merging both arrays
$query = array_merge($_GET, array('page'=>1));
// or by the union of both
$query = array('page'=>1) + $_GET;
// or by altering the array
$query = $_GET;
$query['page'] = 1;
Run Code Online (Sandbox Code Playgroud)
并且PHP已经有一个http_build_str可以从关联数组构建查询字符串:
print '<a href="?' . htmlspecialchars(http_build_str($query)) . '"><<</a>';
Run Code Online (Sandbox Code Playgroud)
编辑 这里是另一种定义http_build_str:
if (!function_exists('http_build_str')) {
function http_build_str($query, $prefix='', $arg_separator='') {
if (!is_array($query)) {
return null;
}
if ($arg_separator == '') {
$arg_separator = ini_get('arg_separator.output');
}
$args = array();
foreach ($query as $key => $val) {
$name = $prefix.$key;
if (!is_numeric($name)) {
$args[] = rawurlencode($name).'='.urlencode($val);
}
}
return implode($arg_separator, $args);
}
}
Run Code Online (Sandbox Code Playgroud)