Как сбросить get параметры php
Перейти к содержимому

Как сбросить get параметры php

  • автор:

remove_query_arg() │ WP 1.5.0

Удаляет указанные параметры GET запроса из URL: ?parametr=value&param2=val2 .

Работает на основе: add_query_arg()

1 раз — 0.000055 сек (очень быстро) | 50000 раз — 0.19 сек (очень быстро) | PHP 7.1.5, WP 4.8.2

Возвращает

Строку . Новый обработанный URL.

Использование

remove_query_arg( $key, $query );

$key(строка/массив) (обязательный) Параметр или параметры запроса которые нужно удалить из URL. $query(логический) URL, строка которую нужно обработать, из которой нужно удалить указанные в первом параметре параметры запроса. По умолчанию используется текущий запрос: $_SERVER[‘REQUEST_URI’] .
По умолчанию: false

Примеры

#1 Удаление нескольких параметров запроса из УРЛ

Предположим мы передаем параметры запроса: remove_recomend и post_id , обрабатываем их и затем нам нужна ссылка без этих параметров, чтобы использовать её дальше в коде:

// используется $_SERVER['REQUEST_URI'] и переданные параметры запроса // удаляем, теперь уже не нужные, параметры $page_url = remove_query_arg( array( 'remove_recomend', 'post_id' ) ); // Используем очищенную от параметров переменную $page_url echo esc_url( $page_url );
#2 Удалим параметры запроса из указанного URL
$url = 'http://blog.example.com/2009/?hello=world&foo=bar'; echo remove_query_arg( 'hello', $url ); //> http://blog.example.com/2009/?foo=bar

Добавить свой пример

Список изменений

С версии 1.5.0 Введена.

Код remove_query_arg() remove query arg WP 6.3.2

function remove_query_arg( $key, $query = false ) < if ( is_array( $key ) ) < // Removing multiple keys. foreach ( $key as $k ) < $query = add_query_arg( $k, false, $query ); >return $query; > return add_query_arg( $key, false, $query ); >

Cвязанные функции

Основной запрос WP
  • add_query_arg()
  • get_queried_object()
  • get_queried_object_id()
  • get_query_var()
  • get_search_query()
  • get_status_header_desc()
  • is_embed()
  • is_robots()
  • redirect_canonical()
  • wp()

Удаление GET-параметра из URL

Удаление GET-параметра из URL

В сегодняшней статье я решил разобрать весьма полезную функцию, удаляющую любой GET-параметр из строки. Где это может быть нужно? Допустим, Вы делаете навигацию по страницам. И Вам необходимо сделать универсальный скрипт её создания, добавляя к текущему URL параметр page. Однако, текущий URL может быть уже с параметром page. В итоге, получится, например, такой URL: «/?page=5&page=7«. Тогда как правильный должен быть: «/?page=7«. Таким образом, необходимо сначала удалить параметр page, а уже потом скрипт создания навигации по страницам сделает своё дело.

Привожу сразу код функции, которая это делает:

function deleteGET($url, $name, $amp = true) $url = str_replace(«&», «&», $url); // Заменяем сущности на амперсанд, если требуется
list($url_part, $qs_part) = array_pad(explode(«?», $url), 2, «»); // Разбиваем URL на 2 части: до знака ? и после
parse_str($qs_part, $qs_vars); // Разбиваем строку с запросом на массив с параметрами и их значениями
unset($qs_vars[$name]); // Удаляем необходимый параметр
if (count($qs_vars) > 0) < // Если есть параметры
$url = $url_part.»?».http_build_query($qs_vars); // Собираем URL обратно
if ($amp) $url = str_replace(«&», «&», $url); // Заменяем амперсанды обратно на сущности, если требуется
>
else $url = $url_part; // Если параметров не осталось, то просто берём всё, что идёт до знака ?
return $url; // Возвращаем итоговый URL
>
echo deleteGET(«http://mysite.ru/?view=category&page=5&id=5», «page»);
?>

Не очень сложный скрипт, однако, он выполняет весьма сложную задачу — удаление GET-параметра из URL. Ведь тут имеется огромное количество нюансов. Просто удалить строку — легко, но ведь нужно, чтобы исчез «?«, если не осталось больше параметров. Нужно, чтобы исчез «&» перед удалённым параметром, но при условии, что он был не первый в строке запроса. Нужно, чтобы удалился & после параметра, но при условии, что он был не последний. Но при этом нельзя удалить сразу и спереди, и сзади амперсанд, иначе пострадают параметры до и после удаляемого. Видите, сколько нюансов, в казалось бы простой задаче? Данная же функция всё это учитывает.

Вот так можно легко удалить GET-параметр из URL, вызвав функцию из этой статьи.

Создано 06.11.2013 12:24:14

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 5 ):

    malina95 07.11.2013 00:35:35

    Зачем такие сложности с разделением ссылки на 2 части? Есть же pparse_url

    rysich 24.03.2014 22:17:51

    А ещё есть $_SERVER[‘QUERY_STRING’]. Ну, это если сокращаемый URL и URL текущей страницы совпадают.

    (Алекс) 04.10.2015 15:58:32

    А еще есть strTok(), которая «отсекает» все вместе переданным токеном.

    Great 15.11.2013 18:07:36
    indigo 06.07.2021 21:36:01

    Чуток переделанная функция которая принимает удаляет нужные ключи function deleteGET($url, $names = []) < $url_part = parse_url($url); //разбиваем адресную строку на массив parse_str($url_part['query'], $get_part); //получаем с адресной строки get параметры (вторая переменаая уже массив "$get_part") //проходимся по массиву находим и удаляем нужные ключи foreach ($names as $v)< unset($get_part[$v]); >//если есть хотя бы 1 get параметр собираем адресную строку и отдем ее if (count($get_part) > 0) < $url = $url_part['path'] . '?' .http_build_query($get_part); >//если get параметров нет просто возарвешь адресную строку без get парамертров else $url = $url_part[‘path’]; return $url; // Возвращаем итоговый URL > echo deleteGET(«http://mysite.ru/?view=category&page=5&id=5», «page»);

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.

    Как удалить get параметры из url?

    Подскажите, кто знает, что нужно прописать в .htaccess, чтобы из строки URL удалялись все GET параметры и осуществлялось перенаправление по тому же адресу, но без параметров? А то получается, что гугл ходит по ссылке, например, «/сatalog?page=2», а там открывается обычная страница каталога, так как параметр ни на что не влияет, но адреса-то разные и считаются разными страницами.

    Непонятно еще, где он такую ссылку нашел, чтобы по ней на сайт зарулить, но может, кто-то со стороны налажал.

    Ответы на пост (4) Написать ответ

    Удаление параметра из строки GET по регулярному выражению

    Помогите с правильным составлением регулярного выражения для preg_replace , точнее мне нужно удалить из строки какой либо параметр GET К примеру, строка cbook.php?idc=n&ids=n&p=2&q=44 из которой мне надо удалить параметр p вне зависимости в какой позиции он стоит, возможно это ?p=2 или же &p=2 . Для этого использую такое регулярное выражение:

    $s = preg_replace('//', '','cbook.php?idc=n&ids=n&p=2&q=44'); 

    Но нормальных результатов оно не дает, что я не правильно составил тут? (делал по учебнику)
    Отслеживать
    27.2k 2 2 золотых знака 45 45 серебряных знаков 76 76 бронзовых знаков
    задан 15 ноя 2017 в 10:20
    734 5 5 золотых знаков 30 30 серебряных знаков 56 56 бронзовых знаков
    по какому учебнику, если не секрет? )
    15 ноя 2017 в 10:37

    @Jean-Claude А в cbook.php?p=2 знак вопроса надо удалить. У меня получилось что-то вроде (?:&|(?(?=\?[^&]*&)(\?)|\?))p=\d+(?(1)&?) (заменить на ‘$1’ ).

    15 ноя 2017 в 10:46
    15 ноя 2017 в 11:09

    3 ответа 3

    Сортировка: Сброс на вариант по умолчанию

    Без регулярных выражений:

    list($path, $query) = explode('?', 'cbook.php?idc=n&ids=n&p=2&q=44'); parse_str($query, $q); // $q - массив параметров unset($q['p']); $query = http_build_query($q); $url = "?$query"; echo $url; // cbook.php?idc=n&ids=n&q=44 

    Отслеживать
    ответ дан 15 ноя 2017 в 10:59
    27.2k 2 2 золотых знака 45 45 серебряных знаков 76 76 бронзовых знаков
    хах, в этот раз я не успел написать 😀
    15 ноя 2017 в 10:59
    прям почти слово в слово, мысль была еще учесть # только (:
    15 ноя 2017 в 11:00
    Ну так, функции стандартные)
    15 ноя 2017 в 11:01

    @vp_arth спасибо! но у меня почему то конструкция в первой строке с квадратными скобками вызывает ошибку( Parse error: syntax error, unexpected ‘[‘ in Z:\home\rrr\www\r.php on line 2

    15 ноя 2017 в 11:04
    Это для php7, сейчас уберу
    15 ноя 2017 в 11:04

    Бутор — эти регулярки, проще всего так

    $http = parse_url('/cbook.php?idc=n&ids=n&p=2&q=44'); parse_str($http['query'], $output); if(isset($output['p'])) < unset($output['p']); >$new = $http["path"] . '?' . http_build_query($output); echo $new; 

    Отслеживать
    ответ дан 15 ноя 2017 в 11:02
    Jean-Claude Jean-Claude
    5,830 2 2 золотых знака 18 18 серебряных знаков 45 45 бронзовых знаков
    В вопросе неполный url)
    15 ноя 2017 в 11:03
    @vp_arth ну ок, уговорил.
    15 ноя 2017 в 11:05

    Для корректного удаления подстроки понадобится шаблон, состоящий из трёх альтернатив:

    Если удаляемый элемент находится сразу после вопросительного знака, но не является единственным GET-параметром

    (в этом случае надо оставить знак «?», и удалить знак «&» вместе с удаляемым элементом)

    Если удаляемый элемент находится сразу после вопросительного знака, и является единственным GET-параметром

    (в этом случае надо удалить знак «?», и все остальные символы после него)

    Если удаляемый элемент находится в любой другой позиции подстроки

    (в этом случае, вместе с удаляемыми символами надо удалять и знак «&», предшествующий удаляемой подстроке)

    Шаблон будет иметь следующий вид:

    В комплекте с PHP-функцией он будет выглядеть таким образом:

    Тестировался на следующих строках:

    cbook.php?idc=n&ids=n&crop=4&p=2&q=44

    cbook.php?idc=n&ids=n&p=2&q=44

    cbook.php?p=2&idc=n&ids=n

    cbook.php?idc=n&p=2

    cbook.php?p=2

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *