用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3506|回复: 1
收起左侧

URL地址合法性检查

[复制链接]
发表于 2008-10-17 17:52:46 | 显示全部楼层 |阅读模式
这个类可以用来检查URL地址的合法性,目前支持ftp,file,http,https,gopher,news,nntp,telnet,wais
PHP复制代码
class urlcheck{
var $regex = array(//协议名(注意在这里必须写成小写) => 对应的正则表达式
'ftp'
=> '$this->ftpurl',
'file' => '$this->fileurl',
'http' =>
'$this->httpurl',
'https' => '$this->httpurl',
'gopher' =>
'$this->gopherurl',
'news' => '$this->newsurl',
'nntp' =>
'$this->nntpurl',
'telnet' => '$this->telneturl',
'wais' =>
'$this->waisurl'
);
 
var $lowalpha;
var $hialpha;
var
$alpha;
var $digit;
var $safe;
var $extra;
var $national;
var
$punctuation;
var $reserved;
var $hex;
var $escape;
var
$unreserved;
var $uchar;
var $xchar;
var $digits;
 
var
$urlpath;
var $password;
var $user;
var $port;
var
$hostnumber;
var $alphadigit;
var $toplabel;
var $domainlabel;
var
$hostname;
var $host;
var $hostport;
var $login;
 
//ftp
var
$ftptype;
var $fsegment;
var $fpath;
var $ftpurl;
 
//file
var
$fileurl;
 
//http,https
var $search;
var $hsegment;
var
$hpath;
var $httpurl;
 
//gopher
var $gopher_string;
var
$selector;
var $gtype;
var $gopherurl;
 
//news
var
$article;
var $group;
var $grouppart;
var
$newsurl;
 
//nntp
var $nntpurl;
 
//telnet
var
$telneturl;
 
//wais
var $wpath;
var $wtype;
var $database;
var
$waisdoc;
var $waisindex;
var $waisdatabase;
var
$waisurl;
 
function check($url){
$pos =
@strpos($url,':',1);
if($pos<1) return false;
$prot =
substr($url,0,$pos);
if(!isset($this->regex[$prot])) return
false;
eval('$regex = '.$this->regex[$prot].';');
return
ereg('^'.$regex.'
,$url);
}
 
function
urlcheck(){
$this->lowalpha = '
[a-z]';
$this->hialpha =
'
[A-Z]';
$this->alpha =
'
('.$this->lowalpha.'|'.$this->hialpha.')';
$this->digit =
'
[0-9]';
$this->safe = '
[$.+_-]';
$this->extra =
'
[*()\'!,]';
$this->national =
'([{}|\^~`]|\\[|\\])';
$this->punctuation =
'[<>#%"]';
$this->reserved = '[?;/&=]';
$this->hex =
'('.$this->digit.'|[a-fA-F])';
$this->escape =
'(%'.$this->hex.'{2})';
$this->unreserved =
'('.$this->alpha.'|'.$this->digit.'|'.$this->safe.'|'.$this->extra.')';
$this->uchar
= '('.$this->unreserved.'|'.$this->escape.')';
$this->xchar =
'('.$this->unreserved.'|'.$this->reserved.'|'.$this->escape.')';
$this->digits
= '('.$this->digit.'+)';
 
$this->urlpath =
'('.$this->xchar.'*)';
$this->password =
'(('.$this->uchar.'|[?;&=]'.')*)';
$this->user =
'(('.$this->uchar.'|[?;&=]'.')*)';
$this->port =
$this->digits;
$this->hostnumber =
'('.$this->digits.'.'.$this->digits.'.'.$this->digits.'.'.$this->digits.')';
$this->alphadigit
= '('.$this->alpha.'|'.$this->digit.')';
$this->toplabel =
'('.$this->alpha.'|('.$this->alpha.'('.$this->alphadigit.'|-)*'.$this->alphadigit.'))';
$this->domainlabel
=
'('.$this->alphadigit.'|('.$this->alphadigit.'('.$this->alphadigit.'|-)*'.$this->alphadigit.'))';
$this->hostname
= '(('.$this->domainlabel.'\\.)*'.$this->toplabel.')';
$this->host =
'('.$this->hostname.'|'.$this->hostnumber.')';
$this->hostport =
'('.$this->host.'(:'.$this->port.')?)';
$this->login =
'(('.$this->user.'(:'.$this->password.')?@)?'.$this->hostport.')';
 
$this->ftptype
= '[aidAID]';
$this->fsegment =
'(('.$this->uchar.'|[?&=])*)';
$this->fpath =
'('.$this->fsegment.'(/'.$this->fsegment.')*)';
$this->ftpurl =
'([fF][tT][pP]://'.$this->login.'(/'.$this->fpath.'(;[tT][yY][pP][eE]='.$this->ftptype.')?)?)';
 
$this->fileurl
=
'([fF][iI][lL][eE]://('.$this->host.'|[lL][oO][cC][aA][lL][hH][oO][sS][tT])?/'.$this->fpath.')';
 
$this->search
= '(('.$this->uchar.'|[;&=])*)';
$this->hsegment =
'(('.$this->uchar.'|[;&=])*)';
$this->hpath =
'('.$this->hsegment.'(/'.$this->hsegment.')*)';
$this->httpurl =
'([hH][tT][tT][pP][sS]?://'.$this->hostport.'(/'.$this->hpath.'([?]'.$this->search.')?)?)';
 
$this->gopher_string
= '('.$this->xchar.'*)';
$this->selector =
'('.$this->xchar.'*)';
$this->gtype =
$this->xchar;
$this->gopherurl =
'([gG][oO][pP][hH][eE][rR]://'.$this->hostport.'(/('.$this->gtype.'('.$this->selector.'(%09'.$this->search.'(%09'.$this->gopher_string.')?)?)?)?)?)';
 
$this->article
= '(('.$this->uchar.'|[;/?:&=])+@'.$this->host.')';
$this->group
=
'('.$this->alpha.'('.$this->alpha.'|'.$this->digit.'|[-.+_])*)';
$this->grouppart
= '(
  • |'.$this->group.'|'.$this->article.')';
    $this->newsurl =
    '([nN][eE][wW][sS]:'.$this->grouppart.')';
     
    $this->nntpurl =
    '([nN][nN][tT][pP]://'.$this->hostport.'/'.$this->group.'(/'.$this->digits.')?)';
     
    $this->telneturl
    = '([tT][eE][lL][nN][eE][tT]://'.$this->login.'/?)';
     
    $this->wpath =
    '('.$this->uchar.'*)';
    $this->wtype =
    '('.$this->uchar.'*)';
    $this->database =
    '('.$this->uchar.'*)';
    $this->waisdoc =
    '([wW][aA][iI][sS]://'.$this->hostport.'/'.$this->database.'/'.$this->wtype.'/'.$this->wpath.')';
    $this->waisindex
    =
    '([wW][aA][iI][sS]://'.$this->hostport.'/'.$this->database.'[?]'.$this->search.')';
    $this->waisdatabase
    =
    '([wW][aA][iI][sS]://'.$this->hostport.'/'.$this->database.')';
    $this->waisurl
    =
    '('.$this->waisdatabase.'|'.$this->waisindex.'|'.$this->waisdoc.')';
    }
    }
  • 复制代码

    评分

    参与人数 1威望 +5 收起 理由
    Hex + 5 精品文章

    查看全部评分

    发表于 2008-10-17 21:15:47 | 显示全部楼层
    好像我目前还不需要这样的类, 不过先收藏再说

    本版积分规则