我们在编写程序的时候,经常会碰到过滤网址的问题,一般我们把域名黑名单存放在数据库,然后对当前输入的网址进行过滤阻止,但是我们存放在数据库的肯定是主域名,而实际用户在操作的时候可能是带目录或其它参数的域名,所以我们必须取得提交的URL的主域名,当然方法可能有很多种,比如用正则找出主域名等,这里我用到了PHP里的一个URL分析函数parse_url()函数,下面看代码:
$url=http://www.zzzz1.com:9090/ok/yy/ok.html;
$url=str_replace('http://','',strtolower($url));
//实践证明,如果URL里没有http的话,就不能进行分析,所以为了防止有些不http的用户,干脆进行一下替换,等下再加回来
$url_info=parse_url('http://'.$url);
//此时url_info为一个数组,我们可以将其键输出来看一下
print "<pre>";
print_r($url_info);
print "</pre>";
好了,输出来的结果就是这个样子了,从里我们可以看到,完整的URL已经被分析出来了,这个时候我们只要取数组相应下标来进行判断即可
Array
(
[scheme] => http
[host] => www.zzzz1.com
[port] => 9090
[path] => /ok/yy/ok.html
)
下面看过滤检查函数(我直接用DEDE的连接类了,呵呵):
function noallowurl($url){
$sql_url=New dedesql(false);
$query_url="select count(bid) from viooma_badurl where b_url LIKE '%".$url."%'";
$row_url=$sql_url->getone($query_url);
if($row_url[0]==0)
$returnval = 0;
else
$returnval = 1;//阻止转换
}
之后在主程序里判断一下就OK了,如:
if(noallowurl($url_info['host'])==1){
echo "<script language='javascript'>alert('兄弟,黑名单啊?');</script>";
}
就这么简单的解决了。
