//ubbcode类
class ubbcode{
var $call_time=0;
//可处理标签及处理関数数对应表
var $tags = array( //小写的标签 => 对应的处理関数関数
'url' => '$this->url',
'email' => '$this->メール'、
'img' => '$this->フラッシュ'、
'サウンド' => ; '$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'=> >font_color'、
'fuchsia' => '$this->font_color'、
' yellow' => '$this->font_color'、
'silver' => '$this-> font_color'、
'purple' => '$this->font_color'、
'marquee' => '$this->simple'、
'b' => ',
'i' => '$this->シンプル',
'u' => '$this->シンプル',
'tt' =>
'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->シンプル'、
'強力' => '$this->simple',
'code' => '$this->simple'、
'samp' => '$this->simple',
'kbd' => '$this->simple',
'var' => '$this->simple',
'dfn' => '$this->simple',
'cite' => '$this->シンプル'、
'小さい' => '$this->simple'、
'big' => '$this->simple'、
'blink' => '$this->シンプル'
);
//url接属性
var $attr_url;
//url 合法性查对オブジェクト
var $urlcheck;
function ubbcode($attr_url){
$this->attr_url = ''.$attr_url;
$this->urlcheck = 新しい 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;
休憩; //如果没有,返る
}
$pos = @strpos($parse,$eregi_arr[0]);
$tag_len=strlen($eregi_arr[0])-2;//标记长度
$tag_start=substr($eregi_arr[0],1,$tag_len);
$tag=strto lower($tag_start);
if((($tag=="url") または ($tag=="email") または ($tag=="img") または ($tag=="flash")) および ($this- >call_time>1)){
echo $this->call_time."
";
return $parse;//結果が不可能な場合は嵌め込みできない标记、直接返す
}
$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;//如果是不支持标记
}
//查找对应的结束标记
$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--;
$ret を返す;
}
function simple($start,$end,$value){
return '<'.$start.'>'.$value.''.$end.'>';
}
関数 url($start,$end,$value){
$trim_value=trim($value);
if (strto lower(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.']';
}
関数 email($start,$end,$value){
if(emailcheck($value)) return ''.$value。 '';
else return '['.$start.']'.$value.'[/'.$end.']';
}
関数 img($start,$end,$value){
$trim_value=trim($value);
if ((strto lower(substr($trim_value,0,7))!="http://") または ($this->urlcheck->check($trim_value)))
return '';
else return '['.$start.']'.$value.'[/'.$end.']';
}
関数 flash($start,$end,$value){
$trim_value=trim($value);
if ((strto lower(substr($trim_value,0,7))!="http://") または ($this->urlcheck->check($trim_value)))
return '