Php 从链接中删除参数

Php 从链接中删除参数,php,regex,Php,Regex,我有许多与参数number相关的链接-值是介于1-1000之间的数字 http://mysite.com?one=2&two=4&number=2 http://mysite.com?one=2&two=4&four=4&number=124 http://mysite.com?one=2&three=4&number=9 http://mysite.com?two=4&number=242 http://mysite.com?on

我有许多与参数number相关的链接-值是介于1-1000之间的数字

http://mysite.com?one=2&two=4&number=2
http://mysite.com?one=2&two=4&four=4&number=124
http://mysite.com?one=2&three=4&number=9
http://mysite.com?two=4&number=242
http://mysite.com?one=2&two=4&number=52
如何使用PHP从该参数和值中删除?我希望收到:

http://mysite.com?one=2&two=4
http://mysite.com?one=2&two=4&four=4
http://mysite.com?one=2&three=4
http://mysite.com?two=4
http://mysite.com?one=2&two=4
如果“&number=”始终在重要参数之后,我将使用str_split(或explode)。
更可靠的方法是使用
parse\u url()
parse\u str()
http\u build\u query()
来分解url并将它们重新组合在一起。

您可以在使用$\u GET['one']构建新url后构建重定向。

您可以使用它将字符串解析为变量。这样你就可以很容易地把它们分开

我编写了一个代码示例

<?php
 $arr = array();
 $arr[] = 'http://mysite.com?one=2&two=4&number=2';
 $arr[] = 'http://mysite.com?one=2&two=4&four=4&number=124';
 $arr[] = 'http://mysite.com?one=2&three=4&number=9';
 $arr[] = 'http://mysite.com?two=4&number=242';
 $arr[] = 'http://mysite.com?one=2&two=4&number=52';

 function remove_invalid_arguments(array $array_invalid, $urlString)
 {
   $info = array();
   parse_str($urlString, $info);
   foreach($array_invalid as $inv)
  if(array_key_exists($inv,$info)) unset($info[$inv]);

   $ret = "";
   $i = 0;
   foreach($info as $k=>$v)
  $ret .= ($i++ ? "&" : ""). "$k=$v"; //maybe urlencode also :)

   return $ret;
 }

 //usage
 $invalid = array('number'); //array of forbidden params
 foreach($arr as $k=>&$v) $v =remove_invalid_arguments($invalid, $arr[1]);

 print_r($arr);

?>

使用以下步骤,这是一个清晰的方法

1- Parse the url into an array with parse_url()
2-  Extract the query portion, decompose that into an array
3- Delete the query parameters you want by unset() them from the array
4- Rebuild the original url using http_build_query()
希望这能像这样帮助你

$urls = '
http://mysite.com?one=2&two=4&number=2
http://mysite.com?one=2&two=4&four=4&number=124
http://mysite.com?one=2&three=4&number=9
http://mysite.com?two=4&number=242
http://mysite.com?one=2&two=4&number=52
';

echo '<pre>';
echo preg_replace('#&number=\d+#', '', $urls);
$url=”
http://mysite.com?one=2&two=4&number=2
http://mysite.com?one=2&two=4&four=4&number=124
http://mysite.com?one=2&three=4&number=9
http://mysite.com?two=4&number=242
http://mysite.com?one=2&two=4&number=52
';
回声';
echo preg_replace('#&number=\d+#',''$url);

根据您的url示例-

$str    = 'http://mysite.com?one=2&two=4&number=2';
$url    = parse_url($str);
parse_str($url['query'], $now );
unset($now['number']);
foreach($now as $key=>$value) :
    if(is_bool($value) ){
        $now[$key] = ($value) ? 'true' : 'false';
    }
endforeach;
$options_string=http_build_query($now);
echo $url    = 'http://mysite.com?'.$options_string;
输出为:

尝试以下操作:

(.+?)(?:&number=\d+)

参考资料:

使用regex查看一下这个例子:(作为替代,最好使用解析器)


假设
&number=2
是最后一个参数。此正则表达式将保留除最后一个参数
number

之外的整个url。您是否从数据库检索这些链接?显示您的代码,您迄今为止尝试了哪些操作。如何生成这些url?使用隐藏字段在第二页上获取
number
参数,这是一个粗略的建议,请提供代码
(.+?)(?:&number=\d+)