$se=Preg_Replace("/(.*)&$/","",$se);
这一句,看起来你是想把最后一个&符号去掉
但是你的代码结果是,如果$se以&结尾,
把$se整个替换成空于是,如果$_GET中有值,
$se就是以&结尾的
不然$se就是空
到了上面这一行
$se总是空$se?$se="?".$se:"";
这一行,$se是空,就把它前面加个?
不然就不变
到这里,$se="?"
你的代码应该这么写
$s="http://:";
$se='';
foreach ($_GET as $key => $value) {     
$se.=$key."=".$value."&";     

//下面这一行有变化  
$se=Preg_Replace("/\&$/","",$se);
$se?$se="?".$se:"";
echo   $s."?$se";