PHP 正则表达式如何替换URL参数

URL:‘/index.php?main_page=index&cPath=55&pagesize=48;
怎么把上面的URL里面包含的‘&pagesize=48’替换掉?

现在用的是下面的公式:
$url_without_pagesize = (isset($_GET["pagesize"])) ? ereg_replace("&pagesize=\\d*", "", $_SERVER['REQUEST_URI']) : $_SERVER['REQUEST_URI'];

但是经常出错。就只替换掉了‘&pagesize=’,48还在URL中。。。。
回复的朋友说的都没错。
非常感谢大家伙的关注,在大家的帮助下,问题得到了圆满解决。

但是百度之让我选一个,所以我选了第一个正确的答案。。。
真的很不好意思。。。。

第1个回答  2010-09-15
用正则是比较笨的办法,但也给你提供一下了:

function getpage(){
//你可以把获取当前page的代码放在函数里
return 123;
}

$str = 'index.php?main_page=index&cPath=55&pagesize=48';
$ptn = '/&pagesize=(\d+)/';
$pagenum = getpage();
$rep = '&pagesize='.$pagenum;

echo $str; // 输出:index.php?main_page=index&cPath=55&pagesize=48

preg_replace($ptn,$rep,$str);

echo $str; // 输出:index.php?main_page=index&cPath=55&pagesize=123

另外多说一下,这种情况可以使用
http_build_query()
这个函数。

具体使用方法:
$u['main_page']=$_GET['main_page'];
$u['cPath']=$_GET['cPath'];
$u['pagesize']=getpage();

$url = 'index.php?'.http_build_query($u);
echo $url;

这个函数很好用,比你自己去匹配好。

参考资料:php中文手册

第2个回答  2010-09-15
<?php
$url="'/index.php?main_page=index&cPath=55&pagesize=48'";
$pos1=strpos($url,'&pagesize');//搜索&pagesize第一次出现的位置
echo substr($url,0,$pos1);//由于&pagesize=48是url的最后,所以可以截取字符串
?>
第3个回答  2010-09-15
考虑到需要滤掉的参数所在位置不同,如下是参考程序,你可以
只需要一句替换语句:
$strnew = preg_replace("/&pagesize=\d*|pagesize=\d*&?/","",$str);

可以看看测试效果:
$str = "'/index.php?main_page=index&cPath=55&pagesize=111'<br>'/index.php?main_page=index&pagesize=111&cPath=55'<br>'/index.php?pagesize=111&main_page=index&cPath=55'<br>'/index.php?pagesize=111'<br>";
$strnew = preg_replace("/&pagesize=\d*|pagesize=\d*&?/","",$str);
echo $str."change to<br>";
echo $strnew;
第4个回答  2010-09-15
str_replace 或replace 或preg_replace
第5个回答  2010-09-15
preg_replace('/(&|\?)pagesize=[^&]+/', '', $_SERVER['REQUEST_URI'])本回答被提问者采纳