PHP добавить / изменить параметр строки запроса и получить URL - PullRequest
9 голосов
/ 05 мая 2011

Как можно перенаправить пользователя обратно на ту же страницу с существующими строками запроса, но иметь 1 добавленный / измененный как «страница».

Я полагаю, 1 метод:

  1. анализ $_SERVER['QUERY_STRING'] в массив
  2. , если в массиве существует page, измените значение, иначе добавьтеэто
  3. используйте http_build_query, чтобы получить строку запроса для добавления к $_SERVER['PHP_SELF']

но есть ли лучший / более прямой путь?

Ответы [ 2 ]

23 голосов
/ 05 мая 2011

Просто чтобы убедиться, что вы знаете об этом, используйте parse_str для анализа строки запроса:

<?php
parse_str($_SERVER['QUERY_STRING'], $query_string);
$query_string['page'] = basename($_SERVER['PHP_SELF']);
$rdr_str = http_build_query($query_string);
5 голосов
/ 07 июня 2013

Используя ответ Джима Рубинштейна, я придумал полезную функцию, которой, я думал, я мог бы поделиться:

  function modQuery($add_to, $rem_from = array(), $clear_all = false){
  if ($clear_all){
     $query_string = array();
  }else{
     parse_str($_SERVER['QUERY_STRING'], $query_string);
  }
  if (!is_array($add_to)){ $add_to = array(); }
  $query_string = array_merge($query_string, $add_to);
  if (!is_array($rem_from)){ $rem_from = array($rem_from); }
  foreach($rem_from as $key){
     unset($query_string[$key]);
  }
  return http_build_query($query_string);
  }

Например: <a href="?<?=modQuery(array('kind'=>'feature'))?>">Feature</a>

...