Nuboskill
@Nuboskill
Начинающий web developer

Как изменить гет запрос регулярным выражением?

domains.ru/job/&exp=ne-imeet-znacheniya&page=2

Мне нужно регулярным выражением перезаписать &page=2 на просто &page=, устал уже с этим мучаться +_+
$uri = preg_replace("&page=(\d)", $_SERVER['REQUEST_URI'], "&page=");

Пробовал так - дропает ошибку =/
Также перебрал еще 100500 вариантов
  • Вопрос задан
  • 931 просмотр
Решения вопроса 1
alexclear
@alexclear
A cat
Не проверяя:

$uri = preg_replace("/&page=(\d)/", $_SERVER['REQUEST_URI'], "&page=");


Сейчас пойду проверять :)

P.S.
preg_replace("/^(.*)&page=(\d)$/", "$1&page=", $_SERVER['REQUEST_URI'])
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Kostik_1993
Web Developer
Функция
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
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы