Функция
function sgp($url, $varname, $value) // substitute get parameter
{
if (is_array($varname)) {
foreach ($varname as $i => $n) {
$v = (is_array($value))
? ( isset($value[$i]) ? $value[$i] : NULL )
: $value;
$url = sgp($url, $n, $v);
}
return $url;
}
preg_match('/^([^?]+)(\?.*?)?(#.*)?$/', $url, $matches);
$gp = (isset($matches[2])) ? $matches[2] : ''; // GET-parameters
if (!$gp) return $url.'?'.$varname.'='.$value;
$pattern = "/([?&])$varname=.*?(?=&|#|\z)/";
if (preg_match($pattern, $gp)) {
$substitution = ($value !== '') ? "\${1}$varname=" . preg_quote($value) : '';
$newgp = preg_replace($pattern, $substitution, $gp); // new GET-parameters
$newgp = preg_replace('/^&/', '?', $newgp);
}
else {
$s = ($gp) ? '&' : '?';
$newgp = $gp.$s.$varname.'='.$value;
}
$anchor = (isset($matches[3])) ? $matches[3] : '';
$newurl = $matches[1].$newgp.$anchor;
return $newurl;
}
Вызов:
<? echo sgp($_SERVER['REQUEST_URI'], 'page', 2);?>
Где:
1) наш URL
2) имя параметра который меняем
3) новое значение параметра
Если такого в строке еще нет, то он буде создан заново, если есть то изменится только значение.
В качестве значения можно применить и мат.функции вида
$cur_page + 1;
1+1