使用php(preg_replace)剥离查询字符串

时间:2010-03-23 00:38:25

标签: php regex preg-replace

http://www.chuckecheese.com/rotator.php?cheese=4&id=1

我想取出身份证,让奶酪独自站立。我试过了:

$qs = preg_replace("[^&id=*]" ,'',$_SERVER[QUERY_STRING]);

但是那说我使用了一个不正确的修饰符。我想删除“$ id =”以及之后的任何数字。 regexp真的和我们看起来一样难吗?

2 个答案:

答案 0 :(得分:3)

你得到一个不正确的修饰符,因为你需要用任意的分隔符包围你的表达式。我倾向于使用!因为我很少想要找到它,但/~和其他人很常见。所以:

$qs = preg_replace('!&id=.*!', '', $_SERVER['QUERY_STRING']);

另一种方法是使用parse_url()。例如:

$s = 'http://www.chuckecheese.com/rotator.php?cheese=4&id=1';
$url = parse_url($s);
parse_str($url['query'], $qs);
unset($qs['id']);
$url['query'] = http_build_str($qs);
$out = http_build_url($url);
echo $out;

注意:这需要pecl_http扩展名,您必须在Windows上自行编译。

答案 1 :(得分:1)

如果ID确实可以是任何内容,请尝试:

$qs = preg_replace("/(&|?)id=[^&]+/", '', $_SERVER[QUERY_STRING]);

如果ID肯定是一个数字,那么这个应该可以解决问题:

$qs = preg_replace("/(&|?)id=\d+/", '', $_SERVER[QUERY_STRING]);