ºÜ¾ÃûÀ´ÕâÀïÁË£¬¸÷λ¿ÉºÃ£¿£¡-PHP¼¼Êõ-3P´úÂëÍø
¡¾·±ÌåÖÐÎÄ¡¿
¡¾ÉèΪÊ×Ò³¡¿
¡¾¼ÓÈëÊղء¿
µ±Ç°Î»ÖãºPHP¼¼ÊõÊ×Ò³ >> PHP»ù´¡ >> ºÜ¾ÃûÀ´ÕâÀïÁË£¬¸÷λ¿ÉºÃ£¿£¡

ºÜ¾ÃûÀ´ÕâÀïÁË£¬¸÷λ¿ÉºÃ£¿£¡

2004-12-15 08:00:00  ×÷Õߣº  À´Ô´£º»¥ÁªÍø  ä¯ÀÀ´ÎÊý£º0  ÎÄ×Ö´óС£º¡¾´ó¡¿¡¾ÖС¿¡¾Ð¡¡¿
¹Ø¼ü×Ö£º¿ÉºÃ À´ÕâÀï ¸÷λ

//ubbcodeÀà

class ubbcode{

var $call_time=0;

//¿É´¦Àí±êÇ©¼°´¦Àíº¯Êý¶ÔÓ¦±í

var $tags = array( //СдµÄ±êÇ© => ¶ÔÓ¦µÄ´¦Àíº¯Êý

'url' => '$this->url',

'email' => '$this->email',

'img' => '$this->img',

'flash' => '$this->flash',

'sound' => '$this->sound',

'black' => '$this->font_color',

'white' => '$this->font_color',

'red' => '$this->font_color',

'pink' => '$this->font_color',

'blue' => '$this->font_color',

'green' => '$this->font_color',

'olive' => '$this->font_color',

'navy' => '$this->font_color',

'gray'=> '$this->font_color',

'fuchsia' => '$this->font_color',

'yellow' => '$this->font_color',

'silver' => '$this->font_color',

'purple' => '$this->font_color',

'marquee' => '$this->simple',

'b' => '$this->simple',

'i' => '$this->simple',

'u' => '$this->simple',

'tt' => '$this->simple',

's' => '$this->simple',

'strike' => '$this->simple',

'h1' => '$this->simple',

'h2' => '$this->simple',

'h3' => '$this->simple',

'h4' => '$this->simple',

'h5' => '$this->simple',

'h6' => '$this->simple',

'sup' => '$this->simple',

'sub' => '$this->simple',

'em' => '$this->simple',

'strong' => '$this->simple',

'code' => '$this->simple',

'samp' => '$this->simple',

'kbd' => '$this->simple',

'var' => '$this->simple',

'dfn' => '$this->simple',

'cite' => '$this->simple',

'small' => '$this->simple',

'big' => '$this->simple',

'blink' => '$this->simple'

);

//urlñͽÓÊôÐÔ

var $attr_url;

//urlºÏ·¨ÐÔ¼ì²é¶ÔÏó

var $urlcheck;

function ubbcode($attr_url){

$this->attr_url = ''.$attr_url;

$this->urlcheck = new urlcheck();

}

//¶Ô$str½øÐÐUBB±àÂë½âÎö

function parse($str){

$this->call_time++;

$parse = ''.htmlencode($str);

$ret = '';

while(true){

$eregi_ret=eregi("\[[#]{0,1}[[:alnum:]]{1,7}\]",$parse,$eregi_arr); //²éÕÒ[xx]

if(!$eregi_ret){

$ret .= $parse;

break; //Èç¹ûûÓУ¬·µ»Ø

}

$pos = @strpos($parse,$eregi_arr[0]);

$tag_len=strlen($eregi_arr[0])-2;//±ê¼Ç³¤¶È

$tag_start=substr($eregi_arr[0],1,$tag_len);

$tag=strtolower($tag_start);

if((($tag=="url") or ($tag=="email") or ($tag=="img") or ($tag=="flash")) and ($this->call_time>1)){

echo $this->call_time."
";

return $parse;//Èç¹û²»ÄÜÊDz»ÄÜǶÌ׵ıê¼Ç£¬Ö±½Ó·µ»Ø

}

$parse2 = substr($parse,0,$pos);//±ê¼Ç֮ǰ

$parse = substr($parse,$pos+$tag_len+2);//±ê¼ÇÖ®ºó

if(!isset($this->tags[$tag])){

echo "$tag_start
";

$ret .= $parse2.'['.$tag_start.']';

continue;//Èç¹ûÊDz»Ö§³ÖµÄ±ê¼Ç

}

//²éÕÒ¶Ô¶ÔÓ¦µÄ½áÊø±ê¼Ç

$eregi_ret=eregi("\[\/".$tag."\]",$parse,$eregi_arr);

if(!$eregi_ret){

$ret .= $parse2.'['.$tag_start.']';

continue;//Èç¹ûûÓжÔÓ¦¸ÃµÄ½áÊø±ê¼Ç

}

$pos=strpos($parse,$eregi_arr[0]);

$value=substr($parse,0,$pos);//ÕâÊÇÆðÖ¹±ê¼ÇÖ®¼äµÄÄÚÈÝ

$tag_end=substr($parse,$pos+2,$tag_len);

$parse=substr($parse,$pos+$tag_len+3);//½áÊø±ê¼ÇÖ®ºóµÄÄÚÈÝ

if(($tag!="url") and ($tag!="email") and ($tag!="img")and ($tag!="flash")){

$value=$this->parse($value);

}

$ret .= $parse2;

eval('$ret .= '.$this->tags[$tag].'("'.$tag_start.'","'.$tag_end.'","'.$value.'");');

}

$this->call_time--;

return $ret;

}

function simple($start,$end,$value){

return '<'.$start.'>'.$value.'';

}

function url($start,$end,$value){

$trim_value=trim($value);

if (strtolower(substr($trim_value,0,7))!="http://")

$trim_value="http://".$trim_value;

if($this->urlcheck->check($trim_value)) return 'attr_url.'>'.$value.'';

else return '['.$start.']'.$value.'[/'.$end.']';

}

function email($start,$end,$value){

if(emailcheck($value)) return ''.$value.'';

else return '['.$start.']'.$value.'[/'.$end.']';

}

function img($start,$end,$value){

$trim_value=trim($value);

if ((strtolower(substr($trim_value,0,7))!="http://") or ($this->urlcheck->check($trim_value)))

return '';

else return '['.$start.']'.$value.'[/'.$end.']';

}

function flash($start,$end,$value){

$trim_value=trim($value);

if ((strtolower(substr($trim_value,0,7))!="http://") or ($this->urlcheck->check($trim_value)))

return '';

else return '['.$start.']'.$value.'[/'.$end.']';

}

function sound($start,$end,$value){

$trim_value=trim($value);

if ((strtolower(substr($trim_value,0,7))!="http://") or ($this->urlcheck->check($trim_value)))

return "";

else return '['.$start.']'.$value.'[/'.$end.']';

}

function font_color($start,$end,$value){

if(strstr("black|white|red|pink|blue|green|olive|navy|gray|fuchsia|yellow|silver|purple",$start))

return "".$value."";

else return '['.$start.']'.$value.'[/'.$end.']';

}

}

//urlcheck.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.')';

}

}

function htmlencode($str){

$str = (string)$str;

$ret = '';

$len = strlen($str);

$nl = false;

for($i=0;$i<$len;$i++){

$chr = $str[$i];

switch($chr){

case '<':

$ret .= '<';

$nl = false;

break;

case '>':

$ret .= '>';

$nl = false;

break;

case '"':

$ret .= '"';

$nl = false;

break;

case '&':

$ret .= '&';

$nl = false;

break;

/*

case ' ':

$ret .= ' ';

$nl = false;

break;

*/

case chr(9):

$ret .= ' ';

$nl = false;

break;

/*

case chr(10):

if($nl) $nl = false;

else{

$ret .= '
';

$nl = true;

}

break;

case chr(13):

if($nl) $nl = false;

else{

$ret .= '
';

$nl = true;

}

break;

*/

default:

$ret .= $chr;

$nl = false;

break;

}

}

return $ret;

}

function htmlencode4textarea($str){

$str = (string)$str;

$ret = '';

$len = strlen($str);

for($i=0;$i<$len;$i++){

$chr = $str[$i];

switch($chr){

case '<':

$ret .= '<';

break;

case '>':

$ret .= '>';

break;

case '"':

$ret .= '"';

break;

case '&':

$ret .= '&';

break;

case ' ':

$ret .= ' ';

break;

case chr(9):

$ret .= ' ';

break;

default:

$ret .= $chr;

break;

}

}

return $ret;

}

function emailcheck($email){

$ret=false;

if(strstr($email, '@') && strstr($email, '.')){

if(eregi("^([_a-z0-9]+([\\._a-z0-9-]+)*)@([a-z0-9]{2,}(\\.[a-z0-9-]{2,})*\\.[a-z]{2,3})$", $email)){

$ret=true;

}

}

return $ret;

}

function str2url($path){

return eregi_replace("%2f","/",urlencode($path));

}

?>

--------------------------

˵Ã÷£ºÔÚÍøÉÏÕÒÁ˰ëÌì·¢ÏÖÈ«ÊǺÎ־ǿµÄÄǶδúÂ룬ÎÒÒ²¾ÍÄÃÀ´¸ÄÁËÒ»ÏÂÓÃÉÏÁË¡£ÆäÖмÓÈëÁËÒ»²¿·Ö×Ô¼ºµÄÄÚÈÝ£¬Ö»ÊÇ»¹²»Ì«Çå³þÈçºÎ¹æ¶¨Í¼Æ¬µÈÔªËØµÄ´óС¡£ÎÒÔø¾­°Ñ function img($start,$end,$value){

$trim_value=trim($value);

if ((strtolower(substr($trim_value,0,7))!="http://") or ($this->urlcheck->check($trim_value)))

return '';

else return '['.$start.']'.$value.'[/'.$end.']';

}

¸ÄΪ£º

function img($start,$end,$value){

$trim_value=trim($value);

if ((strtolower(substr($trim_value,0,7))!="http://") or ($this->urlcheck->check($trim_value)))

{

$pisces=explode(" ",$start);

if(!is_int($pisces[1]) || !!is_int($pisces[2]))

return '';

else

return '';

}

else return '['.$start.']'.$value.'[/'.$end.']';

}

µ«ÓÉÓÚ¶ÔÇ°ÃæµÄÕýÔò±í´ïʽ²»ÊìϤû³É¹¦¡£

ÔðÈα༭£ºadmin
±¾ÎÄÒýÓõØÖ·£º http://www.3pcode.com/php/2004/12/10515.htm
Ïà¹ØÎÄÕÂ