搜索
首页php教程PHP源码PHP写的UBB代码转换HTML代码

[PHP]代码 

<?php
/*

 * @author:zhangwj
 * @data:2012-01-10
 * @content:UBB Convert HTML
 * @email:zhangwj.9991.com@gmail.com

$eq = new EncodeQ3boy($str);初始化类

//以下为ubbEncode参数
$eq->url      = true;       //启用url自动解析   默认false
$eq->html     = true;       //启用HTML编码(处理<,>,全角/半角空格,制表符,换行符)默认true
$eq->image    = true;       //启用图象标签解析  默认true
$eq->font     = true;       //启用字体标签解析  默认true
$eq->element  = true;       //启用外部元素解析  默认true
$eq->flash    = true;       //启用Flash解析     默认true
$eq->php      = true;       //启用语法高亮显示  默认true
//ubbEncode参数结束

echo($eq->getImageOpener());//输出图片自动缩放所需js函数
echo $eq->htmlEncode();          //输出ubb编码后字符串
echo"<hr>";
echo $eq->ubbEncode();           //输出ubb编码后字符串
echo"<hr>";
echo $eq->removeHtml();          //输出移除html标签的字符串
echo"<hr>";
echo $eq->ubbEncode();           //输出移除ubb标签的字符串



支持ubb标签列表:

图片类:
[img]http://www.php.cn/[/img]    插入图片
[limg]http://www.php.cn/[/limg]  图片左绕排
[rimg]http://www.php.cn/[/rimg]  图片右绕排
[cimg]http://www.php.cn/[/cimg]  图片居中绕排

文本控制类:
[br] 换行符
[b]粗体字[b]
[i]斜体字[i]
[u]下划线[u]
[s]删除线[s]
[sub]文字下标[sub]
[sup]文字上标[sup]
[left]文字左对齐[left]
[right]文字右对齐[right]
[center]文字居中[center]
[align=(left|center|right)]文字对齐方式[align]
[size=([1-6])]文字大小[size]
[font=(字体)[font]
[color=(文字颜色)][color]
[list]无序列表[list]
[list=s]有序列表[list]
[list=(A|1|I)]有序列表(列表方式为(abc,123,I II III))[list]
[list=(num)]有序列表(自num开始计数)[list]
[li]列表单元项[li]

外部元素类:
[url]链接[/url]
[url=(链接)]链接文字[/url]
[email]邮件地址[/email]
[email=(邮件地址)]说明文字[/email]邮件地址
[quote]引用块[/quote]
[iframe]内插帧地址[/iframe]
[iframe=(内插帧高度)]内插帧地址[/iframe]
[swf]flash动画地址[/swf]
[swf=宽度,高度]flash动画地址[/swf]

代码块:
[code][/code]
[php][/php]
[code 代码块名称][/code]
[php 代码块名称][/php]

如需使用php语法高亮请务必在代码块两端加上"<??>"标签
*/

class EncodeQ3boy {
        var $str           = "";
        var $iconpath      = "/image/icon";//图标文件路径
        var $imagepath     = "/upfiles/article";//图片文件默认路径
        //var $tagfoot = &#39; border="1" onload="ImageLoad(this);" onClick="ImageOpen(this)" style="cursor: hand" &#39;;//图片文件附加属性
		var $tagfoot = &#39; border="1" style="cursor: hand" &#39;;//图片文件附加属性

        var $url     = false;        //url自动解析
        var $html    = true;                //HTML编码
        var $image   = true;                //解析图象标签
        var $font    = true;                //字体标签
        var $element = true;                //外部元素
        var $flash   = true;                //Flash
        var $php     = true;                //语法高亮显示
        var $others  = true;				//ubb转换时候的其他处理

        function EncodeQ3boy($str=&#39;&#39;,$imgph=&#39;&#39;) {
                if($str) {
                        $str = strtr($str,array("\n\r"=>"\n","\r\n"=>"\n","\r"=>"\n"," "=>" "));
                        $this->str = $str;
                }
                if($imgph) $this->imagepath = $imgph;
        }
        function getImageOpener() {
                return "<script language=\"javascript\" type=\"text/javascript\">\r\nfunction ImageLoad(img) {\r\nif(img.width>480) img.width=480;\r\n}\r\nfunction ImageOpen(img) {\r\nwindow.open(img.src,&#39;&#39;,&#39;menubar=no,scrollbars=yes,width=&#39;+(screen.width-8)+&#39;,height=&#39;+(screen.height-74)+&#39;,left=0,top=0&#39;);\r\n}\r\n</script>";
        }
        function removeHtml($str=&#39;&#39;) {
                if(!$str) $str = $this->str;
                return strip_tags($str);
        }
        function removeUbb($str=&#39;&#39;) {
                if(!$str) $str = $this->str;
                return preg_replace("/\[\/?\w+(\s+[^\]\s]+)*\s*\]/is","",$str);
        }
        function htmlEncode($str=&#39;&#39;) {
                if(!$str) $str = $this->str;
                $str = preg_replace("/\n{2,}/s","\n\n",$str);
                return str_replace("\n","\n<br />",$str);
        }
		function bbcodeurl($url, $tags) {
			if(!preg_match("/<.+?>/s", $url)) {
				return sprintf($tags, $url, addslashes($url));
			} else {
				return &#39; &#39;.$url;
			}
		}
		function parseimg($width, $height, $src) {
			return $this->bbcodeurl($src, &#39;<img&#39;.($width > 0 ? " width=\"$width\"" : &#39;&#39;).($height > 0 ? " height=\"$height\"" : &#39;&#39;)." src=\"$src\" border=\"0\" alt=\"\" />");
		}
        function ubbEncode($str=&#39;&#39;) {
                if(!$str) $str = $this->str;
                $rpl_ary = array();
                $reg_ary = array();
                if($this->html) $str = $this->htmlEncode($str,true);
                $tagfoot = $this->tagfoot;
                $icon    = $this->iconpath;
                $image   = $this->imagepath;
                if($this->php) {
                        preg_match_all(&#39;/(\n\<br \/\>)*\[(php|code)\s*(.*?)\]\s*(.+?)\s*\[\/(php|code)\](\n\<br \/\>)*/is&#39;,$str,$ary);
                        $str = preg_split(&#39;/(\n\<br \/\>)*\[(php|code)\s*(.*?)\]\s*(.+?)\s*\[\/(php|code)\](\n\<br \/\>)*/is&#39;,$str);
                }
                if($this->url){
                        $reg_ary = array_merge($reg_ary,array(
                                &#39;/(?<!\]|\=)\s*(\b\w+@(?:\w+\.)+\w{2,3})\b\s*(?<!\[)/i&#39;,
                                &#39;/(?<!\]|\=)\s*(\b(http|https|ftp):\/\/(\w+\.)+\w+(\/[\w|&|%|\?|=|\+|\.|-]+)*)\b\s*(?<!\[)/i&#39;,
                        ));
                        $rpl_ary = array_merge($rpl_ary,array(
                                &#39;[email]\\1[/email]&#39;,
                                &#39;[url]\\1[/url]&#39;,
                        ));
                }
                if($this->image) {
                        $reg_ary = array_merge($reg_ary,array(
                        "/\[img\]\s*([^\[\<\r\n]+?)\s*\[\/img\]/is",
						"/\[img=(\d{1,4})[x|\,](\d{1,4})\]\s*([^\[\<\r\n]+?)\s*\[\/img\]/is",
                        &#39;/\[img\]\s*http(s?):\/\/(\S+)\s*\[\/img\]/i&#39;,//1
                        &#39;/\[limg\]\s*http(s?):\/\/(\S+)\s*\[\/limg\]/i&#39;,//2
                        &#39;/\[rimg\]\s*http(s?):\/\/(\S+)\s*\[\/rimg\]/i&#39;,//3
                        &#39;/\[cimg\]\s*http(s?):\/\/(\S+)\s*\[\/cimg\]/i&#39;,//4
                        &#39;/\[img\]\s*([^\/:]+)\s*\[\/img\]/i&#39;,//5
                        &#39;/\[limg\]\s*([^\/:]+)\s*\[\/limg\]/i&#39;,//6
                        &#39;/\[rimg\]\s*([^\/:]+)\s*\[\/rimg\]/i&#39;,//7
                        &#39;/\[cimg\]\s*([^\/:]+)\s*\[\/cimg\]/i&#39;,//8
                        &#39;/\[img\]\s*(\S+)\s*\[\/img\]/is&#39;,//9
                        &#39;/\[limg\]\s*(\S+)\s*\[\/limg\]/i&#39;,//10
                        &#39;/\[rimg\]\s*(\S+)\s*\[\/rimg\]/i&#39;,//11
                        &#39;/\[cimg\]\s*(\S+)\s*\[\/cimg\]/i&#39;,//12
                        ));
                        $rpl_ary = array_merge($rpl_ary,array(
                        $this->bbcodeurl(&#39;\\1&#39;, &#39;<img src="%s" &#39;.$tagfoot.&#39;/>&#39;),
						$this->parseimg(&#39;\\1&#39;, &#39;\\2&#39;, &#39;\\3&#39;),
                        &#39;<img src="http\1://\2"&#39;.$tagfoot.&#39;>&#39;,//1
                        &#39;<img src="http\1://\2"&#39;.$tagfoot.&#39; align="left">&#39;,//2
                        &#39;<img src="http\1://\2"&#39;.$tagfoot.&#39; align="right">&#39;,//3
                        &#39;<p align="center"><img src="http\1://\2"&#39;.$tagfoot.&#39;></p>&#39;,//4
                        &#39;<img src="&#39;.$image.&#39;/\1"&#39;.$tagfoot.&#39;>&#39;,//5
                        &#39;<img src="&#39;.$image.&#39;/\1"&#39;.$tagfoot.&#39; align="left">&#39;,//6
                        &#39;<img src="&#39;.$image.&#39;/\1"&#39;.$tagfoot.&#39; align="right">&#39;,//7
                        &#39;<p align="center"><img src="&#39;.$image.&#39;/\1"&#39;.$tagfoot.&#39;></p>&#39;,//8
                        &#39;<img src="\1"&#39;.$tagfoot.&#39;>&#39;,//9
                        &#39;<img src="\1"&#39;.$tagfoot.&#39; align="left">&#39;,//10
                        &#39;<img src="\1"&#39;.$tagfoot.&#39; align="right">&#39;,//11
                        &#39;<p align="center"><img src="\1"&#39;.$tagfoot.&#39;></p>&#39;,//12
                        ));
                }
                if($this->font) {
                        $reg_ary = array_merge($reg_ary,array(
                        &#39;/\[br\]/i&#39;,
                        &#39;/\[b\]/i&#39;,
                        &#39;/\[\/b\]/i&#39;,
                        &#39;/\[i(=s)?\]\s*(.+?)\s*\[\/i\]/is&#39;,
                        &#39;/\[u\]\s*(.+?)\s*\[\/u\]/is&#39;,
                        &#39;/\[s\]\s*(.+?)\s*\[\/s\]/is&#39;,
                        &#39;/\[sub\]\s*(.+?)\s*\[\/sub\]/is&#39;,
                        &#39;/\[sup\]\s*(.+?)\s*\[\/sup\]/is&#39;,
                        &#39;/\[left\]/i&#39;,
                        &#39;/\[\/left\]/i&#39;,
                        &#39;/\[right\]/i&#39;,
                        &#39;/\[\/right\]/i&#39;,
                        &#39;/\[center\]/i&#39;,
                        &#39;/\[\/center\]/i&#39;,
                        &#39;/\[align=\s*(left|center|right)\]/i&#39;,
                        &#39;/\[\/align\]/i&#39;,
                        &#39;/\[size=\s*([\.|\d])\s*\]/i&#39;,
                        &#39;/\[\/size\]/i&#39;,
                        &#39;/\[size=(\d+(\.\d+)?(px|pt|in|cm|mm|pc|em|ex|%)+?)\]/i&#39;,
                        &#39;/\[font=\s*(.*?)\s*\]/i&#39;,
                        &#39;/\[\/font\]/i&#39;,
                        &#39;/\[color=\s*(.*?)\s*\]/i&#39;,
                        &#39;/\[\/color\]/i&#39;,
                        &#39;/\[list\]/i&#39;,
                        &#39;/\[\/list\]/i&#39;,
                        &#39;/\[list=s\]/i&#39;,
                        &#39;/\[\/list\]/i&#39;,
                        &#39;/\[list=(A|1|I)\]/i&#39;,
                        &#39;/\[\/list\]/i&#39;,
                        &#39;/\[list=(\S+?)\]/i&#39;,
                        &#39;/\[\/list\]/i&#39;,
                        &#39;/\[li\]/i&#39;,
                        &#39;/\[\/li\]/i&#39;,
                        &#39;/\[p=(\d{1,2}), (\d{1,2}), (left|center|right)\]/i&#39;,
						&#39;/\[float=(left|right)\]/i&#39;
                        ));
                        $rpl_ary = array_merge($rpl_ary,array(
                        &#39;<br />&#39;,
                        &#39;<b>&#39;,
                        &#39;</b>&#39;,
                        &#39;<i>\\2</i>&#39;,
                        &#39;<u>\\1</u>&#39;,
                        &#39;<s>\\1</s>&#39;,
                        &#39;<sub>\\1</sub>&#39;,
                        &#39;<sup>\\1</sup>&#39;,
                        &#39;<p align="left">&#39;,
                        &#39;</p>&#39;,
                        &#39;<p align="right">&#39;,
                        &#39;</p>&#39;,
                        &#39;<p align="center">&#39;,
                        &#39;</p>&#39;,
                        &#39;<p align="\\1">&#39;,
                        &#39;</p>&#39;,
                        &#39;<font size="\\1pt">&#39;,
                        &#39;</font>&#39;,
                        &#39;<font style="font-size: \\1">&#39;,
                        &#39;<font face="\\1">&#39;,
                        &#39;</font>&#39;,
                        &#39;<font color="\\1">&#39;,
                        &#39;</font>&#39;,
                        &#39;<ul>&#39;,
                        &#39;</ul>&#39;,
                        &#39;<ol>&#39;,
                        &#39;</ol>&#39;,
                        &#39;<ol type="\\1">&#39;,
                        &#39;</ol>&#39;,
                        &#39;<ol start="\\1">&#39;,
                        &#39;</ol>&#39;,
                        &#39;<li>&#39;,
                        &#39;</li>&#39;,
                        &#39;<p style="line-height: \\1px; text-indent: \\2em; text-align: \\3;">&#39;,
						&#39;<span style="float: \\1;">&#39;
                        ));
                }
                if($this->element){
                        $reg_ary = array_merge($reg_ary,array(
                        &#39;/\[url=\s*(.+?)(,1)?\s*\]\s*(.+?)\s*\[\/url\]/i&#39;,
                        &#39;/\[url]\s*(.+?)\s*\[\/url\]/i&#39;,
                        &#39;/\[email=\s*(.+?)\s*\]\s*(.+?)\s*\[\/email\]/i&#39;,
                        &#39;/\[email]\s*(.+?)\s*\[\/email\]/i&#39;,
                        &#39;/\[quote\]\s*(<br \/>)?\s*(.+?)\s*\[\/quote\]/is&#39;,
                        &#39;/\[iframe\]\s*(.+?)\s*\[\/iframe\]/is&#39;,
                        &#39;/\[iframe=\s*(\d+?)\s*\]\s*(.+?)\s*\[\/iframe\]/is&#39;,
                        ));
                        $rpl_ary = array_merge($rpl_ary,array(
                        &#39;<a href="\1" target="_blank">\3</a> &#39;,
                        &#39;<a href="\1" target="_blank">\1</a> &#39;,
                        &#39;<a href="mailto:\1">\2</a> &#39;,
                        &#39;<a href="mailto:\1">\1</a> &#39;,
                        &#39;<table cellpadding="0" cellspacing="0" border="0" width="90%" align="center" style="border:1px gray solid;"><tr><td><table width="100%" cellpadding="5" cellspacing="1" border="0"><tr><td width="100%">\2</td></tr></table></td></tr></table>&#39;,
                        &#39;<iframe src="\" name="ifr1" frameborder="0" allowtransparency="true" scrolling="yes" width="100%" height="340" marginwidth="0" marginheight="0" hspace="0" vspace="0">\1</iframe><br><a href="\1" target="_blank">如果你的浏览器不支持嵌入框,请点这里查看</a>&#39;,
                        &#39;<iframe src="\2" name="ifr1" frameborder="0" allowtransparency="true" scrolling="yes" width="100%" height="\1" marginwidth="0" marginheight="0" hspace="0" vspace="0">\2</iframe><br><a href="\2" target="_blank">如果你的浏览器不支持嵌入框,请点这里查看</a>&#39;,
                        ));
                }
                if($this->flash){
                        $reg_ary = array_merge($reg_ary,array(
                        &#39;/\[swf\]\s*(.+?)\s*\[\/swf\]/i&#39;,
                        &#39;/\[swf=(\d+)\,(\d+)\]\s*(.+?)\s*\[\/swf\]/i&#39;
                        ));
                        $rpl_ary = array_merge($rpl_ary,array(
                        &#39;<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"><param name="movie" value="\1" /><param name="quality" value="high" /><embed src="\1" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed></object>&#39;,
                        &#39;<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="\1" height="\2"><param name="movie" value="\3" /><param name="quality" value="high" /><embed src="\3" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="\1" height="\2"></embed></object>&#39;
                        ));
                }
         		if($this->others){//处理特殊ubb问题
                        $reg_ary = array_merge($reg_ary,array(
                        &#39;/\[upload=\d+]/i&#39;,
                        &#39;/\[attachment=(\d+?)\]/i&#39;,
                        &#39;/\[attach\]\s*(\d+?)\s*\[\/attach\]/i&#39;,
                        &#39;/\[qq\]\s*(\d+?)\s*\[\/qq\]/i&#39;,
                        &#39;/\[indent\]/i&#39;,
                        &#39;/\[\/indent\]/i&#39;
                        ));
                        $rpl_ary = array_merge($rpl_ary,array(
						&#39;&#39;, 
                        &#39;&#39;,
                        &#39;\\1&#39;,
                        &#39;QQ:\\1&#39;,
                        &#39;<blockquote>&#39;,
                        &#39;</blockquote>&#39;                       
                        ));
                }
                if(sizeof($reg_ary)&&sizeof($rpl_ary))$str = preg_replace($reg_ary,$rpl_ary,$str);
                if($this->php) {
                        $tmp = $str[0];
                        for($i=0; $i<sizeof($ary[4]); $i++) {
                                ob_start();
                                highlight_string(trim(strtr($ary[4][$i],array(&#39;&lt;&#39;=>&#39;<&#39;,&#39;&gt;&#39;=>&#39;>&#39;," "=>" ","<br />"=>""))));
                                $tmp .= &#39;<table border=1 cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#055AA0" width=95%><tr><td><code>&#39;.(trim($ary[3][$i])?trim($ary[3][$i]):&#39;代码片段:&#39;).&#39;</code><br /><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td width="100%" class="code">&#39;.ob_get_contents().&#39;</td></tr></table></td></tr></table>&#39;.$str[$i+1];
                                ob_end_clean();
                        }
                        $str = $tmp;
                        unset($tmp);
                }
                return $str;
        }

}
?>

                   

                   

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。