首页 > php教程 > PHP源码 > 正文

PHP写的UBB代码转换HTML代码

PHP中文网
发布: 2016-05-25 17:11:48
原创
1918人浏览过

[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 = ' border="1" onload="ImageLoad(this);" onClick="ImageOpen(this)" style="cursor: hand" ';//图片文件附加属性
		var $tagfoot = ' border="1" style="cursor: hand" ';//图片文件附加属性

        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='',$imgph='') {
                if($str) {
                        $str = strtr($str,array("

"=>"
","
"=>"
","
"=>"
"," "=>" "));
                        $this->str = $str;
                }
                if($imgph) $this->imagepath = $imgph;
        }
        function getImageOpener() {
                return "<script language="javascript" type="text/javascript">
function ImageLoad(img) {
if(img.width>480) img.width=480;
}
function ImageOpen(img) {
window.open(img.src,'','menubar=no,scrollbars=yes,width='+(screen.width-8)+',height='+(screen.height-74)+',left=0,top=0');
}
</script>";
        }
        function removeHtml($str='') {
                if(!$str) $str = $this->str;
                return strip_tags($str);
        }
        function removeUbb($str='') {
                if(!$str) $str = $this->str;
                return preg_replace("/[/?w+(s+[^]s]+)*s*]/is","",$str);
        }
        function htmlEncode($str='') {
                if(!$str) $str = $this->str;
                $str = preg_replace("/
{2,}/s","

",$str);
                return str_replace("
","
<br />",$str);
        }
		function bbcodeurl($url, $tags) {
			if(!preg_match("/<.+?>/s", $url)) {
				return sprintf($tags, $url, addslashes($url));
			} else {
				return ' '.$url;
			}
		}
		function parseimg($width, $height, $src) {
			return $this->bbcodeurl($src, '<img'.($width > 0 ? " width="$width"" : '').($height > 0 ? " height="$height"" : '')." src="$src" border="0" alt="" />");
		}
        function ubbEncode($str='') {
                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('/(
<br />)*[(php|code)s*(.*?)]s*(.+?)s*[/(php|code)](
<br />)*/is',$str,$ary);
                        $str = preg_split('/(
<br />)*[(php|code)s*(.*?)]s*(.+?)s*[/(php|code)](
<br />)*/is',$str);
                }
                if($this->url){
                        $reg_ary = array_merge($reg_ary,array(
                                '/(?<!]|=)s*(w+@(?:w+.)+w{2,3})s*(?<![)/i',
                                '/(?<!]|=)s*((http|https|ftp)://(w+.)+w+(/[w|&|%|?|=|+|.|-]+)*)s*(?<![)/i',
                        ));
                        $rpl_ary = array_merge($rpl_ary,array(
                                '[email]\1[/email]',
                                '[url]\1[/url]',
                        ));
                }
                if($this->image) {
                        $reg_ary = array_merge($reg_ary,array(
                        "/[img]s*([^[<
]+?)s*[/img]/is",
						"/[img=(d{1,4})[x|,](d{1,4})]s*([^[<
]+?)s*[/img]/is",
                        '/[img]s*http(s?)://(S+)s*[/img]/i',//1
                        '/[limg]s*http(s?)://(S+)s*[/limg]/i',//2
                        '/[rimg]s*http(s?)://(S+)s*[/rimg]/i',//3
                        '/[cimg]s*http(s?)://(S+)s*[/cimg]/i',//4
                        '/[img]s*([^/:]+)s*[/img]/i',//5
                        '/[limg]s*([^/:]+)s*[/limg]/i',//6
                        '/[rimg]s*([^/:]+)s*[/rimg]/i',//7
                        '/[cimg]s*([^/:]+)s*[/cimg]/i',//8
                        '/[img]s*(S+)s*[/img]/is',//9
                        '/[limg]s*(S+)s*[/limg]/i',//10
                        '/[rimg]s*(S+)s*[/rimg]/i',//11
                        '/[cimg]s*(S+)s*[/cimg]/i',//12
                        ));
                        $rpl_ary = array_merge($rpl_ary,array(
                        $this->bbcodeurl('\1', '<img src="%s" '.$tagfoot.'/>'),
						$this->parseimg('\1', '\2', '\3'),
                        '<img src="http://"'.$tagfoot.'>',//1
                        '<img src="http://"'.$tagfoot.' align="left">',//2
                        '<img src="http://"'.$tagfoot.' align="right">',//3
                        '<p align="center"><img src="http://"'.$tagfoot.'></p>',//4
                        '<img src="'.$image.'/"'.$tagfoot.'>',//5
                        '<img src="'.$image.'/"'.$tagfoot.' align="left">',//6
                        '<img src="'.$image.'/"'.$tagfoot.' align="right">',//7
                        '<p align="center"><img src="'.$image.'/"'.$tagfoot.'></p>',//8
                        '<img src=""'.$tagfoot.'>',//9
                        '<img src=""'.$tagfoot.' align="left">',//10
                        '<img src=""'.$tagfoot.' align="right">',//11
                        '<p align="center"><img src=""'.$tagfoot.'></p>',//12
                        ));
                }
                if($this->font) {
                        $reg_ary = array_merge($reg_ary,array(
                        '/[br]/i',
                        '/[b]/i',
                        '/[/b]/i',
                        '/[i(=s)?]s*(.+?)s*[/i]/is',
                        '/[u]s*(.+?)s*[/u]/is',
                        '/[s]s*(.+?)s*[/s]/is',
                        '/[sub]s*(.+?)s*[/sub]/is',
                        '/[sup]s*(.+?)s*[/sup]/is',
                        '/[left]/i',
                        '/[/left]/i',
                        '/[right]/i',
                        '/[/right]/i',
                        '/[center]/i',
                        '/[/center]/i',
                        '/[align=s*(left|center|right)]/i',
                        '/[/align]/i',
                        '/[size=s*([.|d])s*]/i',
                        '/[/size]/i',
                        '/[size=(d+(.d+)?(px|pt|in|cm|mm|pc|em|ex|%)+?)]/i',
                        '/[font=s*(.*?)s*]/i',
                        '/[/font]/i',
                        '/[color=s*(.*?)s*]/i',
                        '/[/color]/i',
                        '/[list]/i',
                        '/[/list]/i',
                        '/[list=s]/i',
                        '/[/list]/i',
                        '/[list=(A|1|I)]/i',
                        '/[/list]/i',
                        '/[list=(S+?)]/i',
                        '/[/list]/i',
                        '/[li]/i',
                        '/[/li]/i',
                        '/[p=(d{1,2}), (d{1,2}), (left|center|right)]/i',
						'/[float=(left|right)]/i'
                        ));
                        $rpl_ary = array_merge($rpl_ary,array(
                        '<br />',
                        '<b>',
                        '</b>',
                        '<i>\2</i>',
                        '<u>\1</u>',
                        '<s>\1</s>',
                        '<sub>\1</sub>',
                        '<sup>\1</sup>',
                        '<p align="left">',
                        '</p>',
                        '<p align="right">',
                        '</p>',
                        '<p align="center">',
                        '</p>',
                        '<p align="\1">',
                        '</p>',
                        '<font size="\1pt">',
                        '</font>',
                        '<font style="font-size: \1">',
                        '<font face="\1">',
                        '</font>',
                        '<font color="\1">',
                        '</font>',
                        '<ul>',
                        '</ul>',
                        '<ol>',
                        '</ol>',
                        '<ol type="\1">',
                        '</ol>',
                        '<ol start="\1">',
                        '</ol>',
                        '<li>',
                        '</li>',
                        '<p style="line-height: \1px; text-indent: \2em; text-align: \3;">',
						'<span style="float: \1;">'
                        ));
                }
                if($this->element){
                        $reg_ary = array_merge($reg_ary,array(
                        '/[url=s*(.+?)(,1)?s*]s*(.+?)s*[/url]/i',
                        '/[url]s*(.+?)s*[/url]/i',
                        '/[email=s*(.+?)s*]s*(.+?)s*[/email]/i',
                        '/[email]s*(.+?)s*[/email]/i',
                        '/[quote]s*(<br />)?s*(.+?)s*[/quote]/is',
                        '/[iframe]s*(.+?)s*[/iframe]/is',
                        '/[iframe=s*(d+?)s*]s*(.+?)s*[/iframe]/is',
                        ));
                        $rpl_ary = array_merge($rpl_ary,array(
                        '<a href="" target="_blank"></a> ',
                        '<a href="" target="_blank"></a> ',
                        '<a href="mailto:"></a> ',
                        '<a href="mailto:"></a> ',
                        '<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%"></td></tr></table></td></tr></table>',
                        '<iframe src="" name="ifr1" frameborder="0" allowtransparency="true" scrolling="yes" width="100%" height="340" marginwidth="0" marginheight="0" hspace="0" vspace="0"></iframe><br><a href="" target="_blank">如果你的浏览器不支持嵌入框,请点这里查看</a>',
                        '<iframe src="" name="ifr1" frameborder="0" allowtransparency="true" scrolling="yes" width="100%" height="" marginwidth="0" marginheight="0" hspace="0" vspace="0"></iframe><br><a href="" target="_blank">如果你的浏览器不支持嵌入框,请点这里查看</a>',
                        ));
                }
                if($this->flash){
                        $reg_ary = array_merge($reg_ary,array(
                        '/[swf]s*(.+?)s*[/swf]/i',
                        '/[swf=(d+),(d+)]s*(.+?)s*[/swf]/i'
                        ));
                        $rpl_ary = array_merge($rpl_ary,array(
                        '<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="" /><param name="quality" value="high" /><embed src="" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed></object>',
                        '<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="" height=""><param name="movie" value="" /><param name="quality" value="high" /><embed src="" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="" height=""></embed></object>'
                        ));
                }
         		if($this->others){//处理特殊ubb问题
                        $reg_ary = array_merge($reg_ary,array(
                        '/[upload=d+]/i',
                        '/[attachment=(d+?)]/i',
                        '/[attach]s*(d+?)s*[/attach]/i',
                        '/[qq]s*(d+?)s*[/qq]/i',
                        '/[indent]/i',
                        '/[/indent]/i'
                        ));
                        $rpl_ary = array_merge($rpl_ary,array(
						'', 
                        '',
                        '\1',
                        'QQ:\1',
                        '<blockquote>',
                        '</blockquote>'                       
                        ));
                }
                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('<'=>'<','>'=>'>'," "=>" ","<br />"=>""))));
                                $tmp .= '<table border=1 cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#055AA0" width=95%><tr><td><code>'.(trim($ary[3][$i])?trim($ary[3][$i]):'代码片段:').'</code><br /><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td width="100%" class="code">'.ob_get_contents().'</td></tr></table></td></tr></table>'.$str[$i+1];
                                ob_end_clean();
                        }
                        $str = $tmp;
                        unset($tmp);
                }
                return $str;
        }

}
?>
登录后复制

                   

Replit Ghostwrite
Replit Ghostwrite

一种基于 ML 的工具,可提供代码完成、生成、转换和编辑器内搜索功能。

Replit Ghostwrite 53
查看详情 Replit Ghostwrite

                   

相关标签:
php
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号