PHP - 发送脚本的url-address

Max*_*rai 0 php url

我正在创建一些数据的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)

我怎么能改变呢?

Gum*_*mbo 6

您只需将新的参数附加到旧的参数上,但如果已经存在,则不要替换它.所以你宁愿需要将旧的查询字符串与新的查询字符串合并:

// 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)) . '">&lt;&lt;</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)