Рецепты программирования на PHP или практические советы по программированию → Меняем параметр в ссылке
Иногда возникает необходимость заменить один или несколько параметров в ссылке. Ссылки с параметрами на сайтах уже мало где используются, т.к. такие ссылки не являются "красивыми". Теме не менее, в системах администрирования использование параметров в строке - довольно частое явление.
Ситуация замены параметра возникает часто при совершении какого-то действия с возвратом на предыдущую страницу. Например, в форме редактирования товара по адресу http://domain.ru/admin/?action=edit&id=123 пользователь хочет удалить картинку. Для удаления картинки используется ссылка http://domain.ru/admin/?action=delete_picture&id=123, чтобы после отработки скрипта удаления картинки вернуть пользователя на исходную страницу, надо заменить параметр action=delete_picture на edit. Это простой случай, бывает, когда в строке параметров указывается довольно много параметров и приходится долго формировать ссылку заново.
Чтобы не пропустить ни один "старый" параметр, воспользуемся довольно простым приемом:
| 1 | if(isset($_GET["action"])) $_GET["action"] = "edit"; |
| 2 | $newURL = "http://domain.ru/admin/?".http_build_query($_GET); |
Теперь пользователя можно отправить назад. Например, таким образом (если никакого вывода не происходило, т.е. если заголовки не были отправлены. Но об этом в другой раз.):
| 1 | header("Location: $newURL"); exit; |
В более общем случае, чтобы грамотно сформировать ссылку из параметров, следует организовать массив параметров и воспользоваться оператором http_buil_query. Также, не следует забывать, что в качестве значения параметра могут появляться символы, которые необходимо экранировать. Например, символ & следует заменять & иначе он будет воспринят как разделитель параметров.
| 1 | $opts = array( |
| 2 | "par1"=>val1 |
| 3 | ,"par2"=>val2 |
| 4 | ,"par3"=>val3 |
| 5 | ); |
| 6 | $qs = http_build_query($opts); |
| 7 | $url = "http://domain.ru/admin/?".htmlentities($qs); |
В результате получаем ссылку http://domain.ru/admin/?par1=val1&par2=val2&par3=val3
