替换查询字符串PHP的特定部分

时间:2010-07-22 12:18:16

标签: php regex string

我使用$_SERVER['QUERY_STRING']来查询sting。

一个例子是a=123&b=456&c=789

如何从查询字符串中删除b值以获取a=123&c=789,其中b可以是任何长度的任何值,并且是字母数字。

任何想法都表示赞赏,谢谢。

7 个答案:

答案 0 :(得分:14)

使用url解析的解决方案:

parse_str($_SERVER['QUERY_STRING'], $result_array);
unset($result_array['b']);
$_SERVER['QUERY_STRING'] = http_build_query($result_array);

答案 1 :(得分:7)

该值将为$_GET['b']

怎么样:

str_replace('&b='.$_GET['b'], '', $_SERVER['QUERY_STRING']);

答案 2 :(得分:3)

试试这个:

$query_new = preg_replace('/(^|&)b=[^&]*/', '', $query);

答案 3 :(得分:2)

所有答案看起来都不错,但如果你这样做会更灵活:

// 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);

答案 4 :(得分:1)

您只需使用$_GET创建变量,并在构建过程中排除b查询字符串:

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

$query_string_new现在应该包含a=123&c=789

答案 5 :(得分:1)

你可以使用这个功能:

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

答案 6 :(得分:0)

Pear已经有一个处理URL解析/构建的类(Net_URL2):

通过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