如何更改页码并保持url参数?

时间:2014-03-30 13:41:06

标签: php regex

我想更改网址中的数字,这个数字是页码,但我想将所有其他参数保留在同一个网址中。

我的例子是:

/index.php?page=wallrank-top10-2&requete=keyword&searchkeyword=pvp

我的目标是:

/index.php?page=wallrank-top10-1&requete=keyword&searchkeyword=pvp

/index.php?page=wallrank-top10-3&requete=keyword&searchkeyword=pvp

那我怎么能用php做呢?

<?php
urlprec = currenturl -1;
urlnext = currenturl +1;
?>

我希望只能更改&#34; -1&#34; by&#34; -2&#34;

我怎么能用PHP做到这一点? 也许用一些正则表达式或其他简单的方法?

由于

3 个答案:

答案 0 :(得分:0)

我不知道php。我只能告诉你你能做些什么。

使用此正则表达式:

(?!.*-)\d+

并通过递增来替换匹配。

答案 1 :(得分:0)

$currenturl = '/index.php?page=wallrank-top10-2&requete=keyword&searchkeyword=pvp';
$_GET['page'] = 'wallrank-top10-2';

$currpage = explode('-', $_GET['page']);
print_r($currpage);
$urlprec = str_replace($_GET['page'],
                       implode('-', array_merge(array_slice($currpage, 0, -1),
                                                array(end($currpage)-1))),
                       $currenturl);
$urlnext = str_replace($_GET['page'],
                       implode('-', array_merge(array_slice($currpage, 0, -1),
                                                array(end($currpage)+1))),
                       $currenturl);
print $urlprec."\n";
print $urlnext."\n";

# or using regex

$urlprec = preg_replace_callback(
    '/page=([^&]+)-(\d)&/',
    function($matches) {
        return 'page='.$matches[1].'-'.($matches[2]-1).'&';
    },
    $currenturl);
$urlnext = preg_replace_callback(
    '/page=([^&]+)-(\d)&/',
    function($matches) {
        return 'page='.$matches[1].'-'.($matches[2]+1).'&';
    },
    $currenturl);

print $urlprec."\n";
print $urlnext."\n"; 

这将按照您的要求执行,但不会考虑第一页和最后一页的案例。

答案 2 :(得分:0)

有人在这里回答,但答案被删除了......

答案是正确的,所以这里是解决方案=&gt;

<?
$url = $_SERVER['REQUEST_URI'];
function pmUrl($url, $op="+", $val=1)
{
  $pattern = '/[=&][^=&]+-\K\d+(?=&|$)/';
  return preg_replace_callback(
    $pattern,
    function ($m) use ($op, $val) {
      $ret = $op=="+" ? $m[0]+$val : $m[0]-$val;
      return $ret>0 ? $ret : 0;
    },
    $url
  );
}
?>

使用这个php函数,我只需要使用=&gt;

<?php echo (pmUrl($url, "-", 1)); ?>

生成网址(在我的情况下为/index.php?page=wallrank-top10-1&requete=keyword&searchkeyword=pvp)

要生成下一个网址(在我的情况下为/index.php?page=wallrank-top10-3&requete=keyword&searchkeyword=pvp)