PHP:删除所有查询字符串变量

时间:2012-02-17 18:09:26

标签: php query-string

假设我有以下内容,即当前网址:

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

如何使用PHP删除 S之外的所有参数?换句话说,只需离开:http://myurl.com/locations/?s=bricks其他参数将始终为样式,类型,功能和区域,并且可能存在部分或全部参数。

谢谢!

5 个答案:

答案 0 :(得分:1)

如果您知道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'];

答案 1 :(得分:1)

if ( isset($_GET['s']) && count($_GET) > 1 ) {
    header('Location: ?s='. rawurlencode($_GET['s']));
    exit;
}

编辑有点安抚Jon。

答案 2 :(得分:1)

错误检查方式不多,但如果保证s存在,则可以使用:

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

无论查询字符串中出现s的位置,它都可以正常工作。我正在用explode做一个最小的初始“解析”步骤,但是如果感觉不对,你总是可以引入大枪而不是以parse_url为代价,而不是花费更多冗长。

答案 3 :(得分:1)

你可以通过几种不同的方式实现这一目标。

我将向您展示我使用网址时遇到的最佳标准:

$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'];  

祝你好运!

答案 4 :(得分:1)

parse_str(parse_url($url, PHP_URL_QUERY), $query);
$newurl = 'http://myurl.com/locations/?s=' . $query['s'];