一个改进的UBB类

2016-01-29 14:48 6 1 收藏

一个改进的UBB类,一个改进的UBB类

【 tulaoshi.com - PHP 】

  <?php
/*
如有转载,请注明作者

原作者: 何志强
改进: SonyMusic[ sonymusic@163.net ]
文件: ubb.php
备注: 说是改进,其实核心函数parse()已经完全重写了,而且思路也是不一样的。
不过仍是受何志强的例子的启发,而且测试的例子还有URLCHECK等几个函数也是沿用的何志强的程序,谢谢何志强。
目前还没有颜色的功能,但我会加入的。
如果在程序上有什么BUG或不便的地方,请给我MAIL。
谢谢!
改进功能:
对字符串进行UBB编码,该类目前只支持下列几个简单且实用的编码:
1. URL裢接
[url] http://phpuser.com/ [/url]
http://头可以不需要
如[url]phpuser.com[/url]也是可以的。
2. Email裢接
[email] sonymusic@163.net [/email]
3. 图片裢接
[img] http://www.phpchina.com/images/logo.gif [/img]
同URL链接一样,前面的http也可以不要。
4. 文字方面
[b]粗体字[/b]
[i]斜体字[/i]
[u]加下划线[/u]
[h1]1号标题字[/h1] ... [h6]6号标题字[/h6]
[sup][/sup]
[sub][/sub]
[tt][/tt]
[s][/s]
[strike][/strike]
[em][/em]
[strong][/strong]
[code][/code]
[samp][/samp]
[kbd][/kbd]
[var][/var]
[dfn][/dfn]
[cite][/cite]
[small][/small]
[big][/big]
[blink][/blink]
注意以下几点:
1. url,email,img等标签是不分大小写的.
2. 在标签中不允许有TAB键出现,但空格允许。
3. 该类要调用htmlencode,htmlencode4textarea,emailcheck函数和urlcheck类.
4. 修改后支持嵌套,但url,email,img这三个标签不是允许嵌套的。
技术资料:
Ultimate Bulletin Board
http://www.ultimatebb.com/  
What is UBB Code
http://www.scriptkeeper.com/ubb/ubbcode.html  
*/

include("urlcheck.php");
include("otherfunc.php"); //这两个文件的内容,附在最后。

//ubbcode类
class ubbcode{
var $call_time=0;
//可处理标签及处理函数对应表
var $tags = array( //小写的标签 = 对应的处理函数
'url' = '$this-url',
'email' = '$this-email',
'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',
'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")) and ($this-call_time1)){
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;//如果是不支持的标记
}

//查找对对应的

来源:https://www.tulaoshi.com/n/20160129/1494270.html

延伸阅读
标签: Web开发
基本用法: 代码如下: var ajax = new AjaxObj(url); ajax.addListener(200, function(r){ alert(r); }); ajax.send(); 也可以连续调用: 代码如下: var ajax = new AjaxObj(url).addListener(200, function(r){ alert(r); }).send(); 另外还支持自定义的POST或GET方式请求,以及监视不同的HTTP状态码,自己看代码琢磨...
MySQL 5.1的中文支持的一个改进,从MySQL 4.1开始不支持中文路径,文件名的问题解决了。 见下面示例 Microsoft Windows XP [版本 5.1.2600] (C) 版权所有 1985-2001 Microsoft Corp. C:\Documents and Settings\Administratorrunas /user:aaa cmd 输入 aaa 的密码: 试图将 cmd 作为用户 "MY-TOMATO\aaa&...
标签: Web开发
结合一个存储过程,将分页做成最简单,请看以下源码 此分页类所操作的存储过程#region 此分页类所操作的存储过程 /**//*********************************************************  *  * 功能强大,配合以下这个存储过程  *  * *******************************************************...
标签: Web开发
function JsUBB(str)   {   var re=//[i/](.[^/[]*)/[//i/]/gi;   str=str.replace(re,"i$1/i"); //斜体字   re=//[b/](.[^/[]*)/[//b/]/gi;   str=str.replace(re,"b$1/b"); //粗体字   re=//[u/](.[^/[]*)/[//u/]/gi;   str=str.replace(...
标签: Web开发
我现在还不会写持久层,就用这种方法加上存储过程用,我感觉还比较爽,希望大家多多指教 public class clsdb {      public clsdb()  {   //   // TODO: 在此处添加构造函数逻辑   //  } //数据库连接     public static SqlCo...

经验教程

640

收藏

73
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部