Php убрать из url параметров

Как удалить гет параметр из реферера?

Как удалить элемент из http реферрера ($_SERVER[‘HTTP_REFERER’]) ? а именно если там данные в виде массива
/search?Filter[form]=1&Filter[type]=2
Например удалить Filter[form]=1 и получить /search?Filter[type]=2

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 >

но с в моем случае name это массив

Простой 4 комментария

На входе
/search?Filter[form]=1&Filter[type]=2

SlowJan, какое будет $name тогда при передаче в функцию?

nokimaro, вот не понятно как передать, $name = ‘Filter[form]’; так не пойдет, это не массив, при преобразования урла получается Fiter => [form => 1]

Читайте также:  Css selector child direct

Вся сложность в том что при использовании parse_str параметры которые являются массивом, преобразуются в массив в РНР

Array ( [Filter] => Array ( [form] => 1 [type] => 2 ) )

Быстрый хак — можно в исходной строке $qs_part сделать замену параметра на некий уникальный плейсхолдер, который явно в строке не встретится и тогда удалить элемент можно будет через unset() как и хотел автор.

=', $qs_part); // Разбиваем строку с запросом на массив с параметрами и их значениями parse_str($qs_part, $qs_vars); // Удаляем необходимый параметр unset($qs_vars['']); // Если есть параметры if(count($qs_vars) > 0) < $url = $url_part."?".http_build_query($qs_vars); // Собираем URL обратно if($amp) < // Заменяем амперсанды обратно на сущности, если требуется $url = str_replace("&", "&", $url); >> else < // Если параметров не осталось, то просто берём всё, что идёт до знака ? $url = $url_part; >// Возвращаем итоговый URL return $url; // Возвращаем итоговый URL >

Как вариант — можно не использовать parse_str(), а самому разбивать $qs_part на части через explode() по & и затем по = чтобы получить key-value список

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

Как сделать так чтобы, при отправки ajax события в data: < art: >, выходила два input и между ними &quot; — &quot;?

Источник

Удаление 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 ):

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

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

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

    Чуток переделанная функция которая принимает удаляет нужные ключи 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 Русаков Михаил Юрьевич. Все права защищены.

    Источник

    Stripping A Query Parameter From A URL in PHP

    Recently I needed a function to remove a single query parameter from a given URL in PHP. This seems like the type of thing that there should be a canonical answer for, but, if you run a Google search, you’ll see that there are many ways to skin this cat.

    After giving the task some thought, I wound up implementing essentially what is described in this Stack Overflow answer. In this post, I share the approach, along with the final code.

    Breaking Up The URL

    The first thing to do is to break the URL string into distinct pieces. PHP’s parse_url function will do this for you.

    function http_strip_query_param($url)  return parse_url($url); > $url = 'http://example.com/page?keep=1&delete=0'; var_dump(http_strip_query_param($url)) . PHP_EOL; 
    $ php http_strip_query_param.php array(4) < ["scheme"]=>string(4) "http" ["host"]=> string(11) "example.com" ["path"]=> string(5) "/page" ["query"]=> string(15) "keep=1&delete=0" > 

    Now we’re ready to process the URL.

    Replacing The Query Param

    parse_url will return query as a string not an array. However, we can use parse_str to convert the query string to an array.

    function http_strip_query_param($url)  $pieces = parse_url($url); $query = []; if ($pieces['query'])  parse_str($pieces['query'], $query); > return $query; > $url = 'http://example.com/page?keep=1&delete=0'; var_dump(http_strip_query_param($url)) . PHP_EOL; 

    Here’s how this will execute…

    $ php http_strip_query_param.php array(2) < ["keep"]=>string(1) "1" ["delete"]=> string(1) "0" > 

    Note that rather than returning an array, parse_str stores the parsed query string in the variable that it receives as a second argument (or as global variables if a second argument is not supplied).

    Once we have the query string as an array we can simply unset the query param we want to strip.

    function http_strip_query_param($url, $param)  $pieces = parse_url($url); $query = []; if ($pieces['query'])  parse_str($pieces['query'], $query); unset($query[$param]); > return $query; > $url = 'http://example.com/page?keep=1&delete=0'; $param = 'delete'; var_dump(http_strip_query_param($url, $param)) . PHP_EOL; 
    $ php http_strip_query_param.php array(1) < ["keep"]=>string(1) "1" > 

    Then we need to convert $query back to a string and replace $parts[‘query’] with the our processed query string. We can use http_build_query to convert the array back to a string.

    function http_strip_query_param($url, $param)  $pieces = parse_url($url); $query = []; if ($pieces['query'])  parse_str($pieces['query'], $query); unset($query[$param]); $pieces['query'] = http_build_query($query); > return $pieces; > $url = 'http://example.com/page?keep=1&delete=0'; $param = 'delete'; var_dump(http_strip_query_param($url, $param)) . PHP_EOL; 
    $ php http_strip_query_param.php array(4) < ["scheme"]=>string(4) "http" ["host"]=> string(11) "example.com" ["path"]=> string(5) "/page" ["query"]=> string(6) "keep=1" > 

    Re-Assembling The URL

    For some reason native PHP does not provide a built in function for re-assembling a URL that has been dis-assembled via parse_url . This seems odd to me considering it provides you with a means to dis-assemble a URL natively.

    1. Install pecl_http and use the http_build_url function. This function will re-assemble the URL.
    2. Polyfill http_build_url . The code to do so can be found here

    Once http_build_url is available (either view the extension or a polyfill) you simply use it to reassemble the pieces.

    function http_strip_query_param($url, $param)  $pieces = parse_url($url); $query = []; if ($pieces['query'])  parse_str($pieces['query'], $query); unset($query[$param]); $pieces['query'] = http_build_query($query); > return http_build_url($pieces); > $url = 'http://example.com/page?keep=1&delete=0'; $param = 'delete'; var_dump(http_strip_query_param($url, $param)) . PHP_EOL; 
    $ php http_strip_query_param.php string(30) "http://example.com/page?keep=1" 

    Clean Up

    One of the most common issues I see during code review is indentation that can be prevented by using guard clauses properly. Let’s do a little clean up.

    function http_strip_query_param($url, $param)  $pieces = parse_url($url); if (!$pieces['query'])  return $url; > $query = []; parse_str($pieces['query'], $query); if (!isset($query[$param]))  return $url; > unset($query[$param]); $pieces['query'] = http_build_query($query); return http_build_url($pieces); > $url = 'http://example.com/page?keep=1&delete=0'; $param = 'delete'; var_dump(http_strip_query_param($url, $param)) . PHP_EOL; 
    $ php http_strip_query_param.php string(30) "http://example.com/page?keep=1" 

    Conclusion

    I hope this post came in useful for some people. If you have any questions or comments, feel free to drop a note below, or, as always, you can reach me on Twitter as well.

    More reading from this blog

    Here are some other posts I’ve written that you might find interesting

    Max Chadwick

    Hi, I’m Max!

    I’m a software developer who mainly works in PHP, but loves dabbling in other languages like Go and Ruby. Technical topics that interest me are monitoring, security and performance. I’m also a stickler for good documentation and clear technical writing.

    During the day I lead a team of developers and solve challenging technical problems at Rightpoint where I mainly work with the Magento platform. I’ve also spoken at a number of events.

    If you’d like to get in contact, you can find me on Twitter and LinkedIn.

    The entire source of this site is available on Github.

    If there’s a specific topic you’re looking to read about try searching or browsing by tag.

    © 2023 Max Chadwick

    Источник

    remove_query_arg() │ WP 1.5.0

    $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

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

    Код remove_query_arg() remove query arg WP 6.2.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

    Это, конечно, круто, а есть возможность очистить от параметров адресную строку после того как я обработал get-запрос но еще ничего не вывел?

    Источник

    Оцените статью