我使用$_SERVER['QUERY_STRING']
来查询sting。
一个例子是a=123&b=456&c=789
如何从查询字符串中删除b值以获取a=123&c=789
,其中b可以是任何长度的任何值,并且是字母数字。
任何想法都表示赞赏,谢谢。
答案 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