文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>UBB编码类

UBB编码类

时间:2007-02-17  来源:PHP爱好者

UBB编码类

关键词:PHP

功能:

对字符串进行UBB编码,该类目前只支持下列几个简单且实用的编码:

1. URL裢接

http://www.phpchina.com/

2. Email裢接

[email protected]

3. 图片裢接

4. 文字方面

粗体字

斜体字

加下划线

1号标题字

...

6号标题字

[tt][/tt]

[s][/s]

[em][/em]

[strong][/strong]

[code][/code]

[samp][/samp]

[kbd][/kbd]

[var][/var]

[dfn][/dfn]

[cite][/cite]

注意以下几点:

1. url,email,img等标签是不分大小写的.

2. 在标签中不允许有空格或TAB键出现.

3. 该类要调用htmlencode,htmlencode4textarea,emailcheck函数和urlcheck类.

4. 不支持嵌套

5. 不去持类似于这样的URL:www.phpchina.com

技术资料:

Ultimate Bulletin Board

http://www.ultimatebb.com/

What is UBB Code

http://www.scriptkeeper.com/ubb/ubbcode.html

*/

class ubbcode{

//可处理标签及处理函数对应表

var $tags = array( //小写的标签 => 对应的处理函数

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

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

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

'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){

$parse = '.htmlencode($str);

$ret = ';

while(true){

$pos = @strpos($parse,'[/',2);

if($pos<2){

$ret .= $parse;

break;

}

$parse2 = substr($parse,0,$pos);

$parse = substr($parse,$pos);

$pos = @strpos($parse,']',2);

if($pos<2){

$ret .= $parse2;

continue;

}

$tag_end = substr($parse,2,$pos-2);

$parse = substr($parse,$pos+1);

$tag = strtolower($tag_end);

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

$ret .= $parse2.'[/'.$tag_end.']';

continue;

}

$tag_len = strlen($tag);

$pos = @strrpos($parse2,']');

if($pos<$tag_len+1){

$ret .= $parse2.'[/'.$tag_end.']';

continue;

}

$tag_start = substr($parse2,$pos-$tag_len,$tag_len);

if(strcasecmp($tag_start,$tag_end)!=0 || $parse2[$pos-$tag_len-1]!='['){

$ret .= $parse2.'[/'.$tag_end.']';

continue;

}

$value = substr($parse2,$pos+1);

$ret .= substr($parse2,0,$pos-$tag_len-1);

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

}

return $ret;

}

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

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

}

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

if($this->urlcheck->check($value)) return '.$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){

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

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

}

}

// [ php/inc/class.urlcheck.php ] cvs 1.1

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

    }

    }

    // [ php/inc/htmlencode.php ] cvs 1.2

    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;

    }

    // [ php/inc/htmlencode4textarea.php ] cvs 1.1

    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;

    }

    // [ php/inc/emailcheck.php ] cvs 1.1

    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;

    }

    /*测试

    // [ php/inc/str2url.php ] cvs 1.2

    function str2url($path){

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

    }

    echo ';

    echo ';

    echo ';

    echo '

    ';

    echo '.htmlencode4textarea($ubb).'

    ';

    echo ';

    echo '

    ';

    if(isset($ubb)){

    $ubbcode = new ubbcode('target="_blank"');

    echo '

    --------------------------------------------------------------------------------
    '.$ubbcode->parse($ubb);

    }

    echo ';

    echo ';

    */

    ?>
    php爱好者站 http://www.phpfans.net Linux|Apache|IIS.
  • 相关阅读 更多 +
    排行榜 更多 +
    辰域智控app

    辰域智控app

    系统工具 下载
    网医联盟app

    网医联盟app

    运动健身 下载
    汇丰汇选App

    汇丰汇选App

    金融理财 下载