|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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语言被认为是 |
|