php正则过滤网址中一个参数,请教高手怎么怎么写? 本帖最后由 kwdpx 于 2012-09-27 10:17:28 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 parse_urlparse_str 这两个函数一起用,就能实现了。比正则处理得简单 <?php $str = 'http://127.0.0.1/c/1.php?ft=x7cjhttp://127.0.0.1/c/1.php?form=post&ft=gy4ehttp://127.0.0.1/c/1.php?ft=7yd4r&form=post';$str = preg_replace('/[\?&]ft=\w+/','',$str);var_dump($str);?> 还得用parse_url取得query值才可以知道GET传参判断如何替换?或& <?php$tjurl="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];$tjurl = preg_replace('/[\?&]ft=\w+/','',$tjurl);echo "$tjurl"; exit;?>这二个过滤成功了:http://127.0.0.1/c/1.php?ft=x7cjhttp://127.0.0.1/c/1.php?form=post&ft=gy4e这个没过滤成功:http://127.0.0.1/c/1.php?ft=7yd4r&form=post过滤成:http://127.0.0.1/c/1111.php&form=post应该过滤为:http://127.0.0.1/c/1.php?form=post $arr=array('http://127.0.0.1/c/1.php?ft=x7cj','http://127.0.0.1/c/1.php?form=post&ft=gy4e','http://127.0.0.1/c/1.php?ft=7yd4r&form=post');print_r(array_map('foo',$arr));function foo($url){ $ar=parse_url($url); if(!isset($ar['query'])) return $url; parse_str($ar['query'],$arr); unset($arr['ft']); return $ar['scheme'].'://'.$ar['host'].$ar['path'].($arr ? '?'.http_build_query($arr) : '');}Array( [0] => http://127.0.0.1/c/1.php [1] => http://127.0.0.1/c/1.php?form=post [2] => http://127.0.0.1/c/1.php?form=post) 效果是好,但是整复杂了,我就想一行正则搞定,3楼的思路$str = preg_replace('/[\?&]ft=\w+/','',$str);是对的,只是还有一些错误:$tjurl="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];得到当前网址,该网址有可能出现三种类型:有以下网址:http://127.0.0.1/c/1.php?ft=x7cj需过滤成:http://127.0.0.1/c/1.phphttp://127.0.0.1/c/1.php?form=post&ft=gy4e需过滤成:http://127.0.0.1/c/1.php?form=posthttp://127.0.0.1/c/1.php?ft=7yd4r&form=post需过滤成:http://127.0.0.1/c/1.php?form=post 并不需要$arr=array('http://127.0.0.1/c/1.php?ft=x7cj','http://127.0.0.1/c/1.php?form=post&ft=gy4e','http://127.0.0.1/c/1.php?ft=7yd4r&form=post');仅需:$arr='http://127.0.0.1/c/1.php?ft=x7cj',或$arr='http://127.0.0.1/c/1.php?form=post&ft=gy4e',或$arr='http://127.0.0.1/c/1.php?ft=7yd4r&form=post'另外又想到还有一种格式:http://127.0.0.1/c/1.php?seed=add&ft=7yd4r&form=post也要过滤成http://127.0.0.1/c/1.php?seed=add&form=post 本帖最后由 xuzuning 于 2012-09-27 17:51:13 编辑 求JAVA PHP Python项目外包 兼职 套程序专门指用CMS吗?还是有其他的技术? QQ微博登陆返回msg":"no appkey" 求个类似的样板??? PHP+mysql要实现产品与供应商的关系 关于新浪博客编辑器PHP版封装类 wordpress程序在WIN2003 IIS6 伪静态会吗? 谁能帮忙看看这个是用什么加密的,或者有什么方法可以解密。。谢谢大神们了······已经用Dezender解密,不行! 怎么求出从数组中取出type和brand对应的值 我的PHP到现在这个水平,实在不知道该学什么了,求指点 求一段正则匹配 怎么把一个二维数组转成另一个二维数组
parse_str 这两个函数一起用,就能实现了。
比正则处理得简单
$str = 'http://127.0.0.1/c/1.php?ft=x7cjhttp://127.0.0.1/c/1.php?form=post&ft=gy4ehttp://127.0.0.1/c/1.php?ft=7yd4r&form=post';
$str = preg_replace('/[\?&]ft=\w+/','',$str);
var_dump($str);
?>
$tjurl="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];$tjurl = preg_replace('/[\?&]ft=\w+/','',$tjurl);echo "$tjurl";
exit;
?>这二个过滤成功了:
http://127.0.0.1/c/1.php?ft=x7cjhttp://127.0.0.1/c/1.php?form=post&ft=gy4e
这个没过滤成功:http://127.0.0.1/c/1.php?ft=7yd4r&form=post过滤成:http://127.0.0.1/c/1111.php&form=post应该过滤为:
http://127.0.0.1/c/1.php?form=post
'http://127.0.0.1/c/1.php?ft=x7cj',
'http://127.0.0.1/c/1.php?form=post&ft=gy4e',
'http://127.0.0.1/c/1.php?ft=7yd4r&form=post'
);print_r(array_map('foo',$arr));
function foo($url){
$ar=parse_url($url); if(!isset($ar['query'])) return $url;
parse_str($ar['query'],$arr);
unset($arr['ft']);
return $ar['scheme'].'://'.$ar['host'].$ar['path'].($arr ? '?'.http_build_query($arr) : '');
}
Array
(
[0] => http://127.0.0.1/c/1.php
[1] => http://127.0.0.1/c/1.php?form=post
[2] => http://127.0.0.1/c/1.php?form=post
)
$tjurl="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];得到当前网址,该网址有可能出现三种类型:
有以下网址:http://127.0.0.1/c/1.php?ft=x7cj
需过滤成:http://127.0.0.1/c/1.phphttp://127.0.0.1/c/1.php?form=post&ft=gy4e
需过滤成:http://127.0.0.1/c/1.php?form=posthttp://127.0.0.1/c/1.php?ft=7yd4r&form=post
需过滤成:http://127.0.0.1/c/1.php?form=post
并不需要
$arr=array(
'http://127.0.0.1/c/1.php?ft=x7cj',
'http://127.0.0.1/c/1.php?form=post&ft=gy4e',
'http://127.0.0.1/c/1.php?ft=7yd4r&form=post'
);
仅需:
$arr='http://127.0.0.1/c/1.php?ft=x7cj',
或$arr='http://127.0.0.1/c/1.php?form=post&ft=gy4e',
或$arr='http://127.0.0.1/c/1.php?ft=7yd4r&form=post'另外又想到还有一种格式:
http://127.0.0.1/c/1.php?seed=add&ft=7yd4r&form=post
也要过滤成
http://127.0.0.1/c/1.php?seed=add&form=post