Замена определенной части строки запроса PHP - PullRequest
6 голосов
/ 22 июля 2010

Я использую $_SERVER['QUERY_STRING'], чтобы получить строку запроса.

Примером будет a=123&b=456&c=789

Как можно удалить значение b из строки запроса, чтобы получить a=123&c=789, где b может быть любым значением любой длины и является буквенно-цифровым.

Любые идеи приветствуются, спасибо.

Ответы [ 7 ]

14 голосов
/ 22 июля 2010

Решение, использующее разбор URL:

parse_str($_SERVER['QUERY_STRING'], $result_array);
unset($result_array['b']);
$_SERVER['QUERY_STRING'] = http_build_query($result_array);
7 голосов
/ 22 июля 2010

Значение будет $_GET['b'].

Как насчет:

str_replace('&b='.$_GET['b'], '', $_SERVER['QUERY_STRING']);
3 голосов
/ 22 июля 2010

Попробуйте это:

$query_new = preg_replace('/(^|&)b=[^&]*/', '', $query);
2 голосов
/ 22 июля 2010

Все ответы выглядят хорошо, но это будет более гибко, если вы сделаете:

// Make a copy of $_GET to keep the original data
$getCopy = $_GET;
unset($getCopy['b']); // or whatever var you want to take out

// This is your cleaned array
var_dump($getCopy);

// If you need the URL-encoded string, just use http_build_query()
$encodedString = http_build_query($getCopy);
1 голос
/ 09 июня 2013

Вы можете использовать эту функцию:

function Remove_QS_Key($url, $key) {
$url = preg_replace('/(?:&|(\?))'.$key.'=[^&]*(?(1)&|)?/i', "$1", $url);
return $url;
}

чтобы удалить любой ключ, например,

echo Remove_QS_Key("http://domain.com/?a=b&ref=dusername&c=d&e=f&g=h", "ref");

результат

http://www.domain.com/?a=b&c=d&e=f&g=h
1 голос
/ 22 июля 2010

Вы просто создаете переменную, используя $_GET и исключаете b строку запроса в процессе сборки:

$query_string_new = 'a=' . urlencode($_GET['a']) . '&c=' . urlencode($_GET['c']);

$query_string_new теперь должен содержать a=123&c=789

0 голосов
/ 13 октября 2015

У Pear уже есть класс (Net_URL2), который обрабатывает разбор / сборку URL:

Установка через Composer: https://packagist.org/packages/pear/net_url2 Установка как включает: https://github.com/pear/Net_URL2/blob/master/Net/URL2.php

Пример кода:

$url = new Net_URL2('http://www.example.com/?one=1');
$url->setQueryVariable('two', 2);
echo $url; // http://www.example.com/?one=1&two=2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...