读书人

php正则过滤网址中一个参数如何如何

发布时间: 2012-10-21 09:00:07 作者: rapoo

php正则过滤网址中一个参数,请教高手怎么怎么写?
有以下网址:

http://127.0.0.1/c/1.php?ft=x7cj
需过滤成:http://127.0.0.1/c/1.php

http://127.0.0.1/c/1.php?form=post&ft=gy4e
需过滤成:http://127.0.0.1/c/1.php?form=post

http://127.0.0.1/c/1.php?ft=7yd4r&form=post
需过滤成:http://127.0.0.1/c/1.php?form=post



比如用上面三种格式的网址打开以下php文件,如何用正则输出过滤出的效果?

<?php
$tjurl="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
//怎么用一句话正则过滤上面三种格式的网址?网址中参数“ft=*****”中的*****不是固定的字母或数字,随机变化的

echo "$tjurl";
exit;
?>

[解决办法]

PHP code
<?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);?>
[解决办法]
PHP code
 $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) : '');}
[解决办法]
这样写(注释掉后面的$s可测试前面的)
$s = 'http://127.0.0.1/c/1.php?seed=add&ft=7yd4r&form=post';
$s = 'http://127.0.0.1/c/1.php?ft=x7cj';
$s = 'http://127.0.0.1/c/1.php?form=post&ft=gy4e';
$s = 'http://127.0.0.1/c/1.php?ft=7yd4r&form=post';

echo preg_replace('/([?&])ft=[^&]+(&?)/e', '"$2"==""?"":"$1"', $s);

人家给你弄个数组,只不过是让你测试起来方便些

读书人网 >PHP

热点推荐