日期:2013-12-13  浏览次数:20498 次

<?
//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."<br>";
  return $parse;//如果不能是不能嵌套的标记,直接返回
  }
   
  $parse2 = substr($parse,0,$pos);//标记之前
  $parse = substr($parse,$pos+$tag_len+2);//标记之后
  if(!isset($this->tags[$tag])){
  echo "$tag_start<br>";
  $ret .= $parse2.'['.$tag_start.']';
  continue;//如果是不支持的标记
  }
   
&nbs