zoukankan      html  css  js  c++  java
  • 我的php学习笔记(三十六)PHP中开发自己的UBB代码

    什么是UBB代码

    UBB代码是HTML的一个变种,是Ultimate Bulletin Board (国外一个BBS程序,国内也有不少地方使用这个程序)采用的一种特殊的TAG。UBB代码很简单,虽然功能很少,但基本实现了我们常用的一些功能.就是在PHP文件中可以自己定义的一些代码,然后可以根据这些代码实行相应的在HTML中也能实现的功能。

    优点
    相对HTML安全性高
    使用简单,方便记忆
    自定义功能强大,扩展性好(可以根据自己的需求定义,但一般最好使用一个通用的标准,如url,img)
    有效减少数据库存储代码

    缺点
    排版功能弱
    不允许交叉使用

    UBB代码运行过程
    UBB代码->解析转换->HTML code
    实际上是通过PHP的正则表达式的替换函数进行替换,最后得到UBB代码
    UBB->DB->解析->输出
    UBB->解析->DB->输出

    介绍几种简单的UBB代码
    UBB                                   正则                                   HTML
    [url]  [/url]                /(\[url\])(.*)(\[\/url\])/i               <a href=
    [b] [/b]                    /(\[b\])(.*)(\[\/b\])/i                    <b>
    [img] [/img]               /(\[img\])(.*)(\[\/img\])/i          <img src=

     写一个自己的UBB
    <?php
    
    function get_ubb($str) {
    
          $str = preg_replace( "/(\[)em(.*?)(\])/i" , "<img src=\"emot/em\\2.gif\" />", $str);
           //链接UBB
          $str = preg_replace( "/(\[url\])(.*)(\[\/url\])/i" , "<a href=\\2 target=\"new\">\\2</a>", $str);
           //QQ号码UBB
          $str = preg_replace( "/\[qq\]([0-9]*)\[\/qq\]/i" , "<a target=\"_blank\" href=\"tencent://message/?uin=\${1}&site=www.php100.com&menu=yes\"><img src=\"http://wpa.qq.com/pa?p=1:\${1}:8\" alt=\"QQ\${1}\" height=\"16\" border=\"0\" align=\"top\" /></a>" , $str);
           //链接
          $str = preg_replace( "/(\[b\])(.*)(\[\/b\])/i" , "<b>\\2</b>" ,$str);
           //加粗
           return $str;
    }
    
    if ($_POST['sub' ]){
           echo get_ubb($_POST[message]);
    }
    
    
    ?>
    < script>
    function inserttag(topen,tclose){
    var themess = document.getElementById('con' );//编辑对象
    themess.focus();
    if (document.selection) {//如果是否ie浏览器
       var theSelection = document.selection.createRange().text; //获取选区文字
       //alert(theSelection);
       if(theSelection){
        document.selection.createRange().text = theSelection = topen+theSelection+tclose;//替换
       } else{
        document.selection.createRange().text = topen+tclose;
       }
       theSelection= '';
    
    } else{ //其他浏览器
    
       var scrollPos = themess.scrollTop;
       var selLength = themess.textLength;
       var selStart = themess.selectionStart; //选区起始点索引,未选择为0
       var selEnd = themess.selectionEnd; //选区终点点索引
       if (selEnd <= 2)
       selEnd = selLength;
    
       var s1 = (themess.value).substring(0,selStart); //截取起始点前部分字符
       var s2 = (themess.value).substring(selStart, selEnd) //截取选择部分字符
       var s3 = (themess.value).substring(selEnd, selLength); //截取终点后部分字符
    
       themess.value = s1 + topen + s2 + tclose + s3; //替换
    
       themess.focus();
       themess.selectionStart = newStart;
       themess.selectionEnd = newStart;
       themess.scrollTop = scrollPos;
       return;
    }
    }
    </ script>
    < hr/>
    < font size =2 >
    < img src ="emot/em_01.gif" onclick= 'inserttag("[em_01","]");' />
    < img src ="emot/em_02.gif" onclick= 'inserttag("[em_02","]");' />
    < img src ="emot/em_03.gif" onclick= 'inserttag("[em_03","]");' />
    < img src ="emot/em_04.gif" onclick= 'inserttag("[em_04","]");' />
    < img src ="emot/em_05.gif" onclick= 'inserttag("[em_05","]");' />
    < img src ="emot/em_06.gif" onclick= 'inserttag("[em_06","]");' />
    < img src ="emot/em_07.gif" onclick= 'inserttag("[em_07","]");' />
    < img src ="emot/em_08.gif" onclick= 'inserttag("[em_08","]");' />
    < a href ="javascript:void(0);" onclick= 'inserttag("[b]","[/b]");' >加粗 </ a>
    < a href ="javascript:void(0);" onclick= 'inserttag("[qq]","[/qq]");' >QQ号 </ a>
    < a href ="javascript:void(0);" onclick= 'inserttag("[url]","[/url]");' >超链接 </ a>
    < br>
    </ font>
      <form action= "" method ="post" >
      <textarea name= "message" id= "con" cols = "70%" rows ="10" ></ textarea>
    
      <br > < input type = "submit" name ="sub" value= "提交"/>
    </ form>


  • 相关阅读:
    禾匠 运行h5
    禾匠 前端用户中心显示隐藏菜单
    禾匠 创建新插件
    芸众如何查看前端版本
    查看电脑内存条个数 和 内存是ddr几代
    yii框架中的andFilterWhere 和 andWhere的区别
    mysql 5.7之前版本截取json字符串的值
    FTP上传文件总是上传一半就断掉
    Java中如何保证线程安全性
    Java8内存结构解读
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3033723.html
Copyright © 2011-2022 走看看