찾다
php教程php手册PHP操作ubb代码类

ubb

//ubbcode类  
class ubbcode
{  
    var $nest;  // 递归深度,for debug
    //可处理标签及处理函数表  
    var $tags = array(
        'url' => '$this->url',  
        'email' => '$this->email',  
        'mail' => '$this->email',  // 为了容错,[mail]和等效
        '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',    
        'small' => '$this->simple',  
        'big' => '$this->simple',  
        'blink' => '$this->simple',
        'fly' => '$this->fly',
        'move' => '$this->move',
        'glow' => '$this->CSSStyle',
        'shadow' => '$this->CSSStyle',
        'blur' => '$this->CSSStyle',
        'wave' => '$this->CSSStyle',
        'sub' => '$this->simple',
        'sup' => '$this->simple',
        'size' => '$this->size',
        'face' => '$this->face',
        'font' => '$this->face',  // 为了容错,[font]和[face]等效
        'color' => '$this->color',
        'html' => '$this->html',
        'quote' => '$this->quote',
        'swf' => '$this->swf',
        'upload' => '$this->upload'
        );  
    function ubbcode()
    {  
      $this->$nest= 0;
      $this->$sLastModified= sprintf("%s", date("Y-m-j H:i", getlastmod()));
    }  
 
    /***********************************************************************
    *  对使用者输入的 E-Mail 作简单的检查,
    *  检查使用者的 E-Mail 字串是否有 @ 字元,
    *  在 @ 字元前有英文字母或数字,在之后有数节字串,
    *  最后的小数点后只能有二个或三个英文字母。
    *  super@mail.wilson.gs 就可以通过检查,super@mail.wilson 就不能通过检查
    ************************************************************************/
    function emailcheck($str) 
    {
      if (eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$", $str)) 
        return true;
      else
        return false;  
    }
    /***********************************************************************
    *  对使用者输入的 URL 作简单的检查,
    *  目前只能简单判断,不能自动检查fpt,finger等
    ************************************************************************/
    function checkURL($str) 
    {
      $bValidURL= true;
      if (eregi("([a-z0-9-]+([\.][a-z0-9\-]+)+)", $str, $er_arr)) 
      {    
  /*
  printf ("0. %s
\n", $er_arr[0]);
  printf ("1. %s
\n", $er_arr[1]);
  printf ("2. %s
\n", $er_arr[2]);
  printf ("3. %s
\n", $er_arr[3]);
  printf ("4. %s
\n", $er_arr[4]);
  */
      }
      else
         $bValidURL= false;
      return $bValidURL;
    }
    /***********************************************************************
    *  对使用者输入的 图片URL 作简单的检查,
    *  目前只能简单判断结尾是否为图片文件
    *  不支持由CGI动态生成的图片,比如计数器这类的
    ************************************************************************/
    function checkImgURL($str) 
    {
      if ($this->checkURL($str)) {
        if(eregi("\.(jpeg|jpg|gif|bmp|png|pcx|tiff|tga|lwf)$", $str)) 
          return true;
        else
          return false;
      }
      else
        return false;
    }
    /***********************************************************************
    *  自动补全URL部分,主要是协议前缀,
    *  默认是htpp://,支持https://;ftp://;finger://;gopher://等
    *  函数并不对URL的合法性作检查
    ************************************************************************/
    function formatURL($str) 
    {
      if (!eregi("^(ftp|http|https|mms|gopher|finger|bbs|telnet):(\/\/|\\\\)", $str))
        $str= 'http://'.$str;
      return $str;
    }
    //对$str进行UBB编码解析  
    function parse($str)
    {  
        $nest ++;
        $parse = ''.($str);  
        $ret = '';  
        while(true){  
            //查找[xx] 或者[xx=xx] , 但不包括[xx=]
            $eregi_ret=eregi("\[([a-z][a-z0-9]{0,7})(=[a-zA-Z0-9#.:/&@|\?,%=_\+\"\']+)?\]", $parse, $eregi_arr); 
            if(!$eregi_ret)
            {  
                $ret .= $parse;  
                break; //如果没有,返回  
            }
/*  for Debug
            else 
            {
              printf ("$. %s
", $eregi_ret);
              printf ("0. %s
", $eregi_arr[0]);
              printf ("1. %s
", $eregi_arr[1]);
              printf ("2. %s
", $eregi_arr[2]);
              printf ("3. %s
", $eregi_arr[3]);
            }
*/
 
            $pos = @strpos($parse, $eregi_arr[0]);  // 起始位置
            $tag_start= $eregi_arr[1];
            $tag= strtolower($eregi_arr[1]);
            $tag_param= $eregi_arr[2];
            $parse2 = substr($parse, 0, $pos);//标记之前
            $parse = substr($parse, $pos + $eregi_ret);//标记之后
            if(!isset($this->tags[$tag]))
            {  
                $ret .= $parse2.'['.$tag_start.']';  
                continue;    //如果是不支持的标记  
            }  
            //查找对应的结束标记  
            $eregi_ret=eregi("\[(/".$tag.")\]", $parse, $eregi_arr);  
            if(!$eregi_ret)
            {  
                $ret .= $parse2.'['.$tag_start.$tag_param.']';  
                continue;//没有对应该的结束标记  
            }  
            $pos= strpos($parse, $eregi_arr[0]);  
            $value= substr($parse, 0, $pos);   //起止标记之间的内容
            $tag_end= $eregi_arr[1];
            $parse= substr($parse, $pos + $eregi_ret);//结束标记之后的内容  
            // 允许嵌套标记,递归分析
            if (!(($tag == 'code') or ($tag=="url") or ($tag=="email") or ($tag=="img"))){
                $value= $this->parse($value);  
            }
            $ret.= $parse2;
            $parseFun= sprintf('$ret .= %s($tag_start, $tag_param, $tag_end, $value);', $this->tags[$tag]); 
            eval($parseFun);  
        }  
        $nest --;
        return $ret;  
    }
  /*****************************************************
    * 简单替换,类似[b]变为
    * 标签内容不便,只是替代括号为
    *****************************************************/
    function simple($start, $para, $end, $value){
        if (strlen($para) > 0) 
          return sprintf("[%s%s]%s[%s]", $start, $para, $value, $end);
        else
          return sprintf("%s", $start, $value, $end);
    }
    /*****************************************************
    * 如下认为合法可以没有“http://”;ftp一定要自己加“ftp://”
    * 93611
    *
    * http://www.fogsun.com
    *****************************************************/
    function url($start, $para, $end, $value){  
        $sA= $value;
        $sURL= substr(trim($para), 1);
        if (strlen($sURL) > 0) 
        {
          if (strlen($value) == 0) 
            $sA= $sURL;
        }
        else 
        {
          $sURL= trim($value);
        }
        $sURL= $this->formatURL($sURL);
        if($this->checkURL($sURL)) 
          return "$sA";  
        else {
          return sprintf("[%s%s]%s[%s]", $start, $para, $value, $end);
        }
    }  
    /*****************************************************
    * 如下认为合法可以没有“mailto:”头;
    * [email=pazee@21cn.com]pazee
    *
    * pazee@21cn.com
    *****************************************************/
    function email($start, $para, $end, $value){  
        $sA= $value;
        $sURL= substr(trim($para), 1);
        if (strlen($sURL) > 0) 
        {
          if (strlen($value) == 0) 
            $sA= $sURL;
        }
        else 
        {
          $sURL= trim($value);
        }
        //if (strtolower(substr($sURL, 0, 7)) != "mailto:")  
          $sURL= "mail.php?email=". $sURL;  
        if($this->emailcheck(substr($sURL, 15))) 
          return "$sA";  
        else
          return sprintf("[%s%s]%s[%s]", $start, $para, $value, $end);
    }  
    /*****************************************************
    * 显示图片;如下用法认为合法
    * [img=www.21cn.com/title.jpg][/img]
    *
    *****************************************************/
    function img($start, $para, $end, $value){  
        $sURL= substr(trim($para), 1);
        if (strlen($sURL)           $sURL= trim($value);
        //$sURL= $this->formatURL($sURL);
        if ($this->checkImgURL($sURL))  
          return sprintf("\"从新窗口中浏览\"", $sURL,$sURL);  
        else
          return sprintf("[%s%s]%s[%s]", $start, $para, $value, $end);
    }  
    /*****************************************************
    * 字符串从右向左循环移动 
    * 无参数
    * 等效与html的
    *****************************************************/
    function fly($start, $para, $end, $value){  
      if (strlen($para)>0) // 有参数
        return sprintf("[%s%s]%s[%s]", $start, $para, $value, $end);
      else
        return ''.$value.'';  
    }  
    /*****************************************************
    * 字符串来回移动 
    * 无参数
    * 等效与html的
    *****************************************************/
    function move($start, $para, $end, $value) {
      if (strlen($para)>0) // 有参数
        return sprintf("[%s%s]%s[%s]", $start, $para, $value, $end);
      else
        return ''.$value.'';  
    }  
    /*****************************************************
    * 字符晕光效果包括 glow、shadow和blur
    * 字符晕光效果[glow=a,b,c]或者[shadow=a,b,c]
    * 3个参数允许缺省
    * 实现文字阴影特效,
    * glow, shadow,blur 属性依次为颜色、宽度和边界大小
    * wave 属性依次为变形频率、宽度和边界大小
    *****************************************************/
    function CSSStyle(&$start, &$para, &$end, &$value){
        $rets= sprintf("[%s%s]%s[%s]", $start, $para, $value, $end);
        if (strlen($para)==0) 
        {
          $para="=,,";
        }
        if (eregi("^=([#]?[[:xdigit:]]{6}|[a-z0-9]*),([0-9]*),([0-9]*)", $para, $er_arr))
        {
          $color=  ($er_arr[1] != "") ? $er_arr[1] : red;   // Default Color
          $width=  ($er_arr[2] != "") ? $er_arr[2] : 400;   // Default Width
          $border= ($er_arr[3] != "") ? $er_arr[3] : 5;     // Default Border
          switch ($start) 
          {
            case "glow":
            case "shadow":
              $rets= sprintf("%s", $start, $color, $border, $width, $value);
              break;
            case "blur";
              $rets= sprintf("%s", $start, $border, $color, $width, $value);
              break;
            case "wave":
              $color=  ($er_arr[1] != "") ? $er_arr[1] : 4;   // Default Color
              $border= ($er_arr[3] != "") ? $er_arr[3] : 2;     // Default Border
              $rets= sprintf("%s", $start, $color, $border, $width, $value);
              break;
          }
        }
        return  $rets;
    }  
    /*****************************************************
    * 字体颜色 xxx 
    * n 可以是 #xxxxxx 或者 xxxxxx (6位16进制数)
    * red,greed,blue,black等颜色保留字也有效
    * 等效与html的xxx
    * [color]xxxx[/color]等效于 [color=red]
    *****************************************************/
    function color($start, $para, $end, $value){
        $cl= strtolower(substr($para, 1));
        if ($cl == "")
          $cl= "red";
        if (eregi("(^[#]?[[:xdigit:]]{6})|red|green|blue|yellow|blue|white|gray|brown|silver|purple|orange" ,$cl)) 
          return sprintf("%s",$cl, $value);
        else
          return sprintf("[%s%s]%s[%s]", $start, $para, $value, $end);
    }
    /*****************************************************
    * 字体大小 xxx 1    * 等效与html的xxx
    *****************************************************/
    function size($start, $para, $end, $value){
        $size= substr($para, 1);
        if ($size >=1 && $size 1))
          return sprintf("%s",$size, $value);
        else
          return sprintf("[%s%s]%s[%s]", $start, $para, $value, $end);
    }  
    /*****************************************************
    * 字体名字 [face=n] n字体名称,不需要引号
    * 等效与html的xxx
    *****************************************************/
    function face($start, $para, $end, $value){
        $fn= substr($para, 1);
        if (!eregi("[[:punct:]]", $fn) && strlen($para) > 1) {
          switch (strtoupper($fn))
          {
            case "ST":
              $fn= "宋体";
              break;
            case "HT":
              $fn= "黑体";
              break;
            case "KT":
              $fn= "楷体_GB2312";
              break;
            case "FT":
              $fn= "仿宋_GB2312";
              break;
            case "YY":
              $fn= "幼圆";
              break;
            case "LS":
              $fn= "隶书";
              break;
            case "XST":
              $fn= "新宋体";
              break;
            default:
              $fn= substr($para, 1);
          }
          return sprintf("%s",$fn, $value);
        }
        else
          return sprintf("[%s%s]%s[%s]", $start, $para, $value, $end);
    }  
     /*****************************************************
    * 文件上传[upload]
    *****************************************************/
    function upload($start, $para, $end, $value){
        $fn= trim(substr($para, 1));
        if (!eregi("[[:punct:]]", $fn) && strlen($para) > 1) {
            if (eregi("jpg|jpeg|bmp|gif|png", $fn)) {
                if ($this->checkImgURL($value))  
                    return sprintf("PHP操作ubb代码类 此主题相关图片如下:

\"从新窗口中浏览\"
",$fn,$value,$value);
                else 
                    return sprintf("[%s%s]%s[%s]", $start, $para, $value, $end);    
            } elseif ($fn == "swf") {
                return sprintf("
PHP操作ubb代码类 此主题相关Flash:


全屏欣赏 (点右键->另存为可将动画下载)
",$fn,$value,$value);
            } elseif (eregi("rar|zip|doc", $fn)) {
                return sprintf("PHP操作ubb代码类 点击下载此主题相关附件
",$fn,$value);
            }
        } else 
            return sprintf("[%s%s]%s[%s]", $start, $para, $value, $end);            
    }     
    /*****************************************************
    * 调试代码标签[html]
    *****************************************************/
    function html($start, $para, $end, $value)
 
    {
      if (strlen($value) > 0) {
          $value = eregi_replace('
', "", $value);
          return sprintf("

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

",$value);
      } else {
          return sprintf("[%s]%s[%s]", $start, $value, $end);
      }
    }
    /*****************************************************
    * 引用标签[quote]
    *****************************************************/
    function quote($start, $para, $end, $value)
    {
      if (strlen($value) > 0) {
          return sprintf("
以下为引用内容:
%s

",$value);
      } else {
          return sprintf("[%s]%s[%s]", $start, $value, $end);
      }
    }
    /*****************************************************
    * FLASH[swf]
    *****************************************************/
    function swf($start, $para, $end, $value)
 
    {
 
      if (strlen($value) > 0) {
 
          return sprintf ("

全屏欣赏 (点右键->另存为可将动画下载)
",$value,$value);
 
      } else {
 
          return sprintf("[%s]%s[%s]", $start, $value, $end);
 
      }
 
    }
 
}  
?>



성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경