要删除查询字符串的一部分,我不会使用正则表达式,而是使用现有的用于操作 URL 的函数。
例如,考虑这部分代码,它使用parse_url 函数来提取 URL 的一部分:
$url = '/page.html?k1=1&k2=2';
$parts = parse_url($url);
var_dump($parts);
你会得到:
array
'path' => string '/page.html' (length=10)
'query' => string 'k1=1&k2=2' (length=9)
您现在可以使用parse_str 提取原始查询字符串中包含的信息:
$params = array();
parse_str($parts['query'], $params);
var_dump($params);
这会得到你:
array
'k1' => string '1' (length=1)
'k2' => string '2' (length=1)
现在,要删除一个参数,您可以测试它是否存在于数组中,如果存在,则将其删除:
$to_remove = 'k1';
if (array_key_exists($to_remove, $params)) {
unset($params[$to_remove]);
}
var_dump($params);
现在给出以下参数数组:
array
'k2' => string '2' (length=1)
最后,您可以使用http_build_query 将各个部分重新组合在一起:
$new_query = http_build_query($params);
var_dump($new_query);
你会得到:
string 'k2=2' (length=4)
你现在只需要在你的 URL 之后注入这个 ;-)
有些人可能会说它有点长......我会回答这个问题,看看这段代码,人们会立即理解它的目的——复杂的正则表达式并非如此。