- remove_query_arg() │ WP 1.5.0
- Примеры
- #1 Удаление нескольких параметров запроса из УРЛ
- #2 Удалим параметры запроса из указанного URL
- Список изменений
- Код remove_query_arg() remove query arg WP 6.2.2
- Cвязанные функции
- Основной запрос WP
- Удаление GET-параметра из URL
- Комментарии ( 5 ):
- удалить параметр GET в URL после завершения обработки (без использования POST), PHP
- Прекрасный способ удалить GET-переменные с помощью PHP?
- 11 ответов
- удалить параметр GET в URL после завершения обработки (не используя POST), PHP
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-запрос но еще ничего не вывел?
Удаление 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.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - 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 Русаков Михаил Юрьевич. Все права защищены.
удалить параметр GET в URL после завершения обработки (без использования POST), PHP
У меня есть url, как этот http://localhost/join/prog/ex.php Когда я использую метод GET, адрес URL, подобный этому http://localhost/join/prog/ex.php?name=MEMORY+2+GB&price=20&quantity=2&code=1&search=add Мой вопрос: поэтому я все еще использую метод GET, но я хочу, чтобы после обработки в методе GET закончен, я хочу вернуть URL (удалить параметр) в http://localhost/join/prog/ex.php , как ранее (не используя метод POST). Как я могу это сделать?
@pekka: нет перенаправления, но я хочу удалить параметр, когда закончите, используя метод GET (просто удалите параметр)
Кажется, вы путаете цель GET и POST. GET-запросы извлекают статические ресурсы, POST-запросы создают изменение данных на стороне сервера. Я не могу придумать причину, почему вы хотели бы лишить эти параметры.
@Brad: я использую метод GET для сохранения данных в базе данных. каждый раз, когда я обновляю (F5), данные продолжают поступать в базу данных, потому что параметры все еще там. Итак, я хочу, чтобы каждый раз после ввода параметров данные должны были быть стерты, так что каждый раз, когда я обновляю (F5), данные не будут вводиться в базу данных, потому что в URL нет параметра
Именно так. По этой причине вы должны использовать POST или PUT для этого запроса; GET не должен использоваться для создания новых данных.
Бред, иногда у людей есть потребности, которые ты не понимаешь (и это не твое дело). Мой сайт использует только одну страницу, которая динамически обрабатывается с помощью ajax. Моя веб-страница по сути никогда не обновляется. Теперь мне нужно отправить электронное письмо, которое будет содержать ссылку, при нажатии на которую, вы перейдете непосредственно к подразделу сайта и загрузите объект. Из электронной почты я не могу использовать JavaScript. Поэтому я не могу отправить сообщение на мою страницу. Это означает, что я должен отправить GET. Но так как страница никогда не обновляется, параметры GET остаются в адресе навсегда и вызывают проблемы при нажатии F5.
Суть в следующем: когда мы задаем вопросы, нам нужны ответы. Не мнения. То, что он пытается сделать, не имеет смысла в ВАШИХ проектах, не означает, что это не имеет смысла в ИХ проектах. Вы также можете утверждать, что мой проект плохой, что у меня должны быть отдельные страницы, а не одна обновленная страница Ajax . Но опять же, вы будете говорить о вещах, которые вы не знаете. Я не начал этот проект, и я не решил использовать такую структуру. Я взял этот проект от других людей, и теперь я застрял с ним. Так пожалуйста. Дайте ответы, а не мнения. Спасибо.
Прекрасный способ удалить GET-переменные с помощью PHP?
У меня есть строка с полным URL, включая переменные GET. Каков наилучший способ удалить переменные GET? Есть ли хороший способ удалить только один из них? Это код, который работает, но не очень красив (я думаю):
$current_url = explode('?', $current_url); echo $current_url[0];
Приведенный выше код просто удаляет все переменные GET. URL-адрес в моем случае создан из CMS, поэтому мне не нужна информация о переменных сервера.
Я бы придерживался того, что у вас есть, если производительность не является проблемой. Решение regex, поставляемое Gumbo, будет таким же привлекательным.
Он не должен быть красивым, если он идет в functions.php или где бы вы ни скрывали свои уродливые биты, вам нужно только увидеть qs_build (), чтобы вызвать его
11 ответов
Хорошо, чтобы удалить все переменные, возможно, самый красивый —
Самый быстрый (см. ниже), и обрабатывает URL-адреса без ‘?’ должным образом.
Чтобы взять url + querystring и удалить только одну переменную (без использования замены регулярного выражения, которая может быть быстрее в некоторых случаях), вы можете сделать что-то вроде:
function removeqsvar($url, $varname)
Замена регулярного выражения для удаления одного var может выглядеть так:
function removeqsvar($url, $varname) < return preg_replace('/([?&])'.$varname.'=[^&]+(&|$)/','$1',$url); >
Устанавливает тайминги нескольких разных методов, обеспечивая синхронизацию reset между циклами.
$mtime = microtime(); $mtime = explode(" ",$mtime); $mtime = $mtime[1] + $mtime[0]; $endtime = $mtime; $totaltime = ($endtime - $starttime); echo "regexp execution time: ".$totaltime." seconds; "; $mtime = microtime(); $mtime = explode(" ",$mtime); $mtime = $mtime[1] + $mtime[0]; $starttime = $mtime; for($i = 0; $i < $number_of_tests; $i++)< $str = "http://www.example.com?test=test"; $str = explode('?', $str); >$mtime = microtime(); $mtime = explode(" ",$mtime); $mtime = $mtime[1] + $mtime[0]; $endtime = $mtime; $totaltime = ($endtime - $starttime); echo "explode execution time: ".$totaltime." seconds; "; $mtime = microtime(); $mtime = explode(" ",$mtime); $mtime = $mtime[1] + $mtime[0]; $starttime = $mtime; for($i = 0; $i < $number_of_tests; $i++)< $str = "http://www.example.com?test=test"; $qPos = strpos($str, "?"); $url_without_query_string = substr($str, 0, $qPos); >$mtime = microtime(); $mtime = explode(" ",$mtime); $mtime = $mtime[1] + $mtime[0]; $endtime = $mtime; $totaltime = ($endtime - $starttime); echo "strpos execution time: ".$totaltime." seconds; "; $mtime = microtime(); $mtime = explode(" ",$mtime); $mtime = $mtime[1] + $mtime[0]; $starttime = $mtime; for($i = 0; $i < $number_of_tests; $i++)< $str = "http://www.example.com?test=test"; $url_without_query_string = strtok($str, '?'); >$mtime = microtime(); $mtime = explode(" ",$mtime); $mtime = $mtime[1] + $mtime[0]; $endtime = $mtime; $totaltime = ($endtime - $starttime); echo "tok execution time: ".$totaltime." seconds; ";
regexp execution time: 0.14604902267456 seconds; explode execution time: 0.068033933639526 seconds; strpos execution time: 0.064775943756104 seconds; tok execution time: 0.045819044113159 seconds; regexp execution time: 0.1408839225769 seconds; explode execution time: 0.06751012802124 seconds; strpos execution time: 0.064877986907959 seconds; tok execution time: 0.047760963439941 seconds; regexp execution time: 0.14162802696228 seconds; explode execution time: 0.065848112106323 seconds; strpos execution time: 0.064821004867554 seconds; tok execution time: 0.041788101196289 seconds; regexp execution time: 0.14043688774109 seconds; explode execution time: 0.066350221633911 seconds; strpos execution time: 0.066242933273315 seconds; tok execution time: 0.041517972946167 seconds; regexp execution time: 0.14228296279907 seconds; explode execution time: 0.06665301322937 seconds; strpos execution time: 0.063700199127197 seconds; tok execution time: 0.041836977005005 seconds;
strtok выигрывает и, безусловно, самый маленький код.
удалить параметр GET в URL после завершения обработки (не используя POST), PHP
Мой вопрос: так, я все еще использую метод GET, но я хочу, чтобы после обработки в GET-методе закончен, я хочу вернуть URL-адрес (удалить параметр) в http://localhost/join/prog/ex.php , так как ранее (не используя метод POST). Как мне это сделать?
Поместите это в свой HTML-файл (HTML5).
Или, используя бэкэнд-решение, используя сеанс, например;
else < if (!empty($_SESSION['got']))< $_GET = $_SESSION['got']; unset($_SESSION['got']); >//use the $_GET vars here.. >
сelse < if (!empty($_SESSION['got']))< $_GET = $_SESSION['got']; unset($_SESSION['got']); >//use the $_GET vars here.. >
ПРОСТОЙ ОТВЕТ
Просто поместите это в верхнюю часть файла, который вам нужно, чтобы запросы GET исчезли из строки URL браузера после загрузки.
я думаю, после вызова url вы хотите перенаправить файл ex.php, но на этот раз без каких-либо параметров. для этого попробуйте использовать следующий код в ex.php
здесь, что у id просто перенаправляет перенаправление на ту же страницу, не проверяя, есть ли какой-либо параметр в строке запроса. код разумно проверяет наличие параметров, id любые параметры там, он будет перенаправлять на ex.php, иначе он будет печатать «Привет, никаких параметров нет!» строка!
Если вы используете apache, подумайте об использовании файла .htaccess с mod_rewirte. Здесь быстрый старт. Я думаю, что этот результат можно получить и в iis, также с файлом web.config