PHP: удалить все, кроме одной переменной строки запроса - PullRequest
0 голосов
/ 17 февраля 2012

Предположим, у меня есть следующее, которое является текущим URL:

http://myurl.com/locations/?s=bricks&style=funky-quirky+rustic&feature=floors-concrete+kitchen+bathroom

Как мне удалить все параметры , кроме S с использованием PHP? Другими словами, просто оставив: http://myurl.com/locations/?s=bricks Другими параметрами всегда будут Style, Type, Feature и Area, и некоторые или все из них могут присутствовать.

Спасибо!

Ответы [ 5 ]

1 голос
/ 17 февраля 2012
parse_str(parse_url($url, PHP_URL_QUERY), $query);
$newurl = 'http://myurl.com/locations/?s=' . $query['s'];
1 голос
/ 17 февраля 2012

Вы можете достичь этого несколькими различными способами.

Я покажу вам лучший стандарт, с которым я когда-либо сталкивался при работе с URL:

$originUrl = parse_url('http://myurl.com/locations/?s=bricks&style=funky-quirky+rustic&feature=floors-concrete+kitchen+bathroom'); 
parse_str($originUrl['query'], $queryString);
echo $newUrl = $originUrl['scheme'].'://'.$originUrl['host'].$originUrl['path'].'?s='.$queryString['s'];  

Удачи!

1 голос
/ 17 февраля 2012
if ( isset($_GET['s']) && count($_GET) > 1 ) {
    header('Location: ?s='. rawurlencode($_GET['s']));
    exit;
}

Отредактировано, чтобы немного успокоить Джона.

1 голос
/ 17 февраля 2012

Не так много для проверки ошибок, но если s гарантированно существует, это будет работать:

list($base, $query) = explode('?', $url);
parse_str($query, $vars);
$result = $base.'?s='.rawurlencode($vars['s']);

Он также будет работать независимо от того, в какой позиции s появляется в строке запроса. Я делаю минимальный начальный шаг "разбора" с explode, но если это не так, вы всегда можете ввести большие пушки и вместо этого использовать parse_url за счет гораздо более многословный.

1 голос
/ 17 февраля 2012

Если вы знаете, что s всегда будет первым параметром, то вы можете просто сделать:

$url = "http://myurl.com/locations/?s=bricks&style=funky-quirky+rustic&feature=floors-concrete+kitchen+bathroom";
$split = explode('&',$url);
echo $split[0];

Однако, если позиция s в параметрах неизвестна, вы можетесделать это:

$url = "http://myurl.com/locations/?s=bricks&style=funky-quirky+rustic&feature=floors-concrete+kitchen+bathroom";
$split = explode('?',$url);
parse_str($split[1],$params);
echo $split[0].'?s='.$params['s'];
...