仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1464|回复: 20
打印 上一主题 下一主题

[学习教程] PHP编程:PHP操作ubb代码类

[复制链接]
再见西城 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:10:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
通过这段时间的学习实践,对软件开发有了更多新的认识,不在局限于之前的片面性。当然,现在所学到的东西其实并不多,离当一个真正的程序员,还有很大的差距。ubb   <?PHP
//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 <br/>\n", $er_arr[0]);
  printf ("1. %s <br/>\n", $er_arr[1]);
  printf ("2. %s <br/>\n", $er_arr[2]);
  printf ("3. %s <br/>\n", $er_arr[3]);
  printf ("4. %s <br/>\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<br/>", $eregi_ret);
              printf ("0. %s<br/>", $eregi_arr[0]);
              printf ("1. %s<br/>", $eregi_arr[1]);
              printf ("2. %s<br/>", $eregi_arr[2]);
              printf ("3. %s<br/>", $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>%s<%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 "<a href=\"$sURL\" class=\"small\" target=_blank>$sA</a>";   
        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 "<a href=\"$sURL\" class=\"small\" target=_blank>$sA</a>";   
        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) <= 0)  
          $sURL= trim($value);
        //$sURL= $this->formatURL($sURL);
        if ($this->checkImgURL($sURL))   
          return sprintf("<a href=\"%s\" target=\"_blank\"><img src=\"%s\" border=0 alt=\"重新窗口中阅读\"></img></a>", $sURL,$sURL);   
        else
          return sprintf("[%s%s]%s[%s]", $start, $para, $value, $end);
    }   
    /*****************************************************
    * 字符串从右向左轮回挪动  
    * 无参数
    * 等效与html的<marquee>
    *****************************************************/
    function fly($start, $para, $end, $value){   
      if (strlen($para)>0) // 有参数
        return sprintf("[%s%s]%s[%s]", $start, $para, $value, $end);
      else
        return '<marquee behavior=alternate scrolldelay=100>'.$value.'</marquee>';   
    }   
    /*****************************************************
    * 字符串往返挪动  
    * 无参数
    * 等效与html的<marquee>
    *****************************************************/
    function move($start, $para, $end, $value) {
      if (strlen($para)>0) // 有参数
        return sprintf("[%s%s]%s[%s]", $start, $para, $value, $end);
      else
        return '<marquee  scrolldelay=100>'.$value.'</marquee>';   
    }   
    /*****************************************************
    * 字符晕光后果包含 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("<font style=\"FILTER: %s(Color =%s,Strength=%s); width:%s\">%s</font>", $start, $color, $border, $width, $value);
              break;
            case "blur";
              $rets= sprintf("<font style=\"FILTER: %s(Strength=%s);color:%s; width:%s\">%s</font>", $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("<font style=\"FILTER: %s(Freq=%s, Strength=%s); width:%s\">%s</font>", $start, $color, $border, $width, $value);
              break;
          }
        }
        return  $rets;
    }   
    /*****************************************************
    * 字体色彩 xxx  
    * n 可所以 #xxxxxx 或 xxxxxx (6位16进制数)
    * red,greed,blue,black等色彩保存字也无效
    * 等效与html的<font color=n>xxx</font>
    * [color]xxxx
等效于
    *****************************************************/
    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("<font color=%s>%s</font>",$cl, $value);
        else
          return sprintf("[%s%s]%s[%s]", $start, $para, $value, $end);
    }
    /*****************************************************
    * 字体巨细 [size=n]xxx
1<= n <= 7;
    * 等效与html的<font size=n>xxx</font>
    *****************************************************/
    function size($start, $para, $end, $value){
        $size= substr($para, 1);
        if ($size >=1 && $size <=7 && (strlen($para) > 1))
          return sprintf("<font size=%s>%s</font>",$size, $value);
        else
          return sprintf("[%s%s]%s[%s]", $start, $para, $value, $end);
    }   
    /*****************************************************
    * 字体名字 [face=n] n字体称号,不需求引号
    * 等效与html的<font face=n>xxx</font>
    *****************************************************/
    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("<font face=\"%s\">%s</font>",$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("<img src=\"images/%s.gif\" align=\"absmiddle\"> 此主题相干图片以下:<br><br><a href=\"%s\" target=\"_blank\"><img src=\"%s\" border=0 alt=\"重新窗口中阅读\"></img></a><br>",$fn,$value,$value);
                else  
                    return sprintf("[%s%s]%s[%s]", $start, $para, $value, $end);     
            } elseif ($fn == "swf") {
                return sprintf("<center><img src=\"images/%s.gif\" align=\"absmiddle\"> 此主题相干Flash:<br><br><PARAM NAME=PLAY VALUE=TRUE><PARAM NAME=LOOP VALUE=TRUE><PARAM NAME=QUALITY VALUE=HIGH><embed src=\"%s\" quality=high width=\"500\" height=\"300\" pluginspage=\"http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash\" type=\"application/x-shockwave-flash\"></embed><br><a href=\"%s\" class=\"small\" target=_blank>全屏浏览</a> (点右键->另存为可将动画下载)</center>",$fn,$value,$value);
            } elseif (eregi("rar|zip|doc", $fn)) {
                return sprintf("<img src=\"images/%s.gif\" align=\"absmiddle\"> <a href=\"%s\" class=\"small\" target=_blank>点击下载此主题相干附件</a><br>",$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('<br[[:space:]]*/?[[:space:]]*>', "", $value);
          return sprintf("<br><span><textarea cols=70 rows=10 class=\"code\">%s</textarea><br><input type=button value=\" 运转代码 \"  class=\"special\"> <b>[Ctrl+A 全体选择 提醒:你可先修正局部代码,再按运转]</b></span><br>",$value);
      } else {
          return sprintf("[%s]%s[%s]", $start, $value, $end);
      }
    }
    /*****************************************************
    * 援用标签[quote]
    *****************************************************/
    function quote($start, $para, $end, $value)
    {
      if (strlen($value) > 0) {
          return sprintf("<table width=\"100%%\" align=center border=1 bordercolor=\"#AAAAAA\"><tr bgcolor=\"#EAEAEA\"><td class=view><font color=\"#000099\"><b>以下为援用内容:</b></font><br><font color=\"#000066\">%s</font></td></tr></table><br>",$value);
      } else {
          return sprintf("[%s]%s[%s]", $start, $value, $end);
      }
    }
    /*****************************************************
    * FLASH[swf]
    *****************************************************/
    function swf($start, $para, $end, $value)
  
    {
  
      if (strlen($value) > 0) {
  
          return sprintf ("<br><center><PARAM NAME=PLAY VALUE=TRUE><PARAM NAME=LOOP VALUE=TRUE><PARAM NAME=QUALITY VALUE=HIGH><embed src=\"%s\" quality=high width=\"500\" height=\"300\" pluginspage=\"http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash\" type=\"application/x-shockwave-flash\"></embed><br><a href=\"%s\" class=\"small\" target=_blank>全屏浏览</a> (点右键->另存为可将动画下载)</center>",$value,$value);
  
      } else {
  
          return sprintf("[%s]%s[%s]", $start, $value, $end);
  
      }
  
    }
  
}   
?>
基础这个东西是个比较笼统的概念,如果你之前学习过c语言, c语言被认为是
再现理想 该用户已被删除
沙发
发表于 2015-2-4 09:49:56 | 只看该作者
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
活着的死人 该用户已被删除
板凳
发表于 2015-2-7 03:30:02 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
变相怪杰 该用户已被删除
地板
发表于 2015-2-10 05:18:11 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
乐观 该用户已被删除
5#
发表于 2015-2-11 08:47:19 | 只看该作者
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
若相依 该用户已被删除
6#
发表于 2015-3-2 05:52:55 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
海妖 该用户已被删除
7#
发表于 2015-3-9 01:04:08 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
第二个灵魂 该用户已被删除
8#
发表于 2015-3-11 21:15:25 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
兰色精灵 该用户已被删除
9#
发表于 2015-3-13 23:07:18 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
愤怒的大鸟 该用户已被删除
10#
发表于 2015-3-19 02:04:21 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
山那边是海 该用户已被删除
11#
发表于 2015-3-22 18:10:27 | 只看该作者
实践是检验自己会不会的真理。
admin 该用户已被删除
12#
发表于 2015-3-25 03:03:03 | 只看该作者
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
13#
发表于 2015-4-9 21:45:53 | 只看该作者
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
爱飞 该用户已被删除
14#
发表于 2015-4-11 10:18:58 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
精灵巫婆 该用户已被删除
15#
发表于 2015-4-13 18:47:09 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
飘灵儿 该用户已被删除
16#
发表于 2015-4-21 02:21:47 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
若天明 该用户已被删除
17#
发表于 2015-4-21 17:54:31 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
因胸联盟 该用户已被删除
18#
发表于 2015-4-26 05:10:31 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
再见西城 该用户已被删除
19#
 楼主| 发表于 2015-4-26 07:12:56 | 只看该作者
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
冷月葬花魂 该用户已被删除
20#
发表于 2015-5-1 17:51:15 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 21:20

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表