`
nakupanda
  • 浏览: 416870 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

从DISCUZ中拿出来的UBBCODE函数

    博客分类:
  • php
阅读更多

<?php
/*
从Discuz7.2中分离出来的UBBCODE函数
*/
function parseurl($url, $text) {
if(!$url && preg_match("/((https?|ftp|gopher|news|telnet|rtsp|mms|callto|bctp|ed2k|thunder|synacast){1}:\/\/|www\.)[^\[\"']+/i", trim($text), $matches)) {
$url = $matches[0];
$length = 65;
if(strlen($url) > $length) {
$text = substr($url, 0, intval($length * 0.5)).' ... '.substr($url, - intval($length * 0.3));
}
return '<a href="'.(substr(strtolower($url), 0, 4) == 'www.' ? 'http://'.$url : $url).'" target="_blank">'.$text.'</a>';
} else {
$url = substr($url, 1);
if(substr(strtolower($url), 0, 4) == 'www.') {
$url = 'http://'.$url;
}
return '<a href="'.$url.'" target="_blank">'.$text.'</a>';
}
}

function parseemail($email, $text) {
if(!$email && preg_match("/\s*([a-z0-9\-_.+]+)@([a-z0-9\-_]+[.][a-z0-9\-_.]+)\s*/i", $text, $matches)) {
$email = trim($matches[0]);
return '<a href="mailto:'.$email.'">'.$email.'</a>';
} else {
return '<a href="mailto:'.substr($email, 1).'">'.$text.'</a>';
}
}

function parsetrtd($bgcolor, $colspan, $rowspan, $width) {
return ($bgcolor == 'td' ? '</td>' : '<tr'.($bgcolor ? ' bgcolor="'.$bgcolor.'"' : '').'>').'<td'.($colspan > 1 ? ' colspan="'.$colspan.'"' : '').($rowspan > 1 ? ' rowspan="'.$rowspan.'"' : '').($width ? ' width="'.$width.'"' : '').'>';
}

function parsetable($width, $bgcolor, $message) {
if(!preg_match("/^\[tr(?:=([\(\)%,#\w]+))?\]\s*\[td(?:=(\d{1,2}),(\d{1,2})(?:,(\d{1,4}%?))?)?\]/", $message) && !preg_match("/^<tr[^>]*?>\s*<td[^>]*?>/", $message)) {
return str_replace('\\"', '"', preg_replace("/\[tr(?:=([\(\)%,#\w]+))?\]|\[td(?:=(\d{1,2}),(\d{1,2})(?:,(\d{1,4}%?))?)?\]|\[\/td\]|\[\/tr\]/", '', $message));
}
if(substr($width, -1) == '%') {
$width = substr($width, 0, -1) <= 98 ? intval($width).'%' : '98%';
} else {
$width = intval($width);
$width = $width ? ($width <= 560 ? $width.'px' : '98%') : '';
}
return '<table cellspacing="0" class="t_table" '.
($width == '' ? NULL : 'style="width:'.$width.'"').
($bgcolor ? ' bgcolor="'.$bgcolor.'">' : '>').
str_replace('\\"', '"', preg_replace(array(
"/\[tr(?:=([\(\)%,#\w]+))?\]\s*\[td(?:=(\d{1,2}),(\d{1,2})(?:,(\d{1,4}%?))?)?\]/ie",
"/\[\/td\]\s*\[td(?:=(\d{1,2}),(\d{1,2})(?:,(\d{1,4}%?))?)?\]/ie",
"/\[\/td\]\s*\[\/tr\]\s*/i"
), array(
"parsetrtd('\\1', '\\2', '\\3', '\\4')",
"parsetrtd('td', '\\1', '\\2', '\\3')",
'</td></tr>'
), $message)
).'</table>';
}

function bbcodeurl($url, $tags) {
if(!preg_match("/<.+?>/s", $url)) {
if(!in_array(strtolower(substr($url, 0, 6)), array('http:/', 'https:', 'ftp://', 'rtsp:/', 'mms://'))) {
$url = 'http://'.$url;
}
return str_replace(array('submit', 'logging.php'), array('', ''), sprintf($tags, $url, addslashes($url)));
} else {
return '&nbsp;'.$url;
}
}

function parseimg($width, $height, $src) {
return bbcodeurl($src, '<img'.($width > 0 ? " width=\"$width\"" : '').($height > 0 ? " height=\"$height\"" : '')." src=\"$src\" border=\"0\" alt=\"\" />");
}

function ubbcode($message){
$msglower = strtolower($message);
if(strpos($msglower, '[/url]') !== FALSE) {
$message = preg_replace("/\[url(=((https?|ftp|gopher|news|telnet|rtsp|mms|callto|bctp|ed2k|thunder|synacast){1}:\/\/|www\.|mailto:)([^\s\[\"']+?))?\](.+?)\[\/url\]/ies", "parseurl('\\1', '\\5')", $message);
}
if(strpos($msglower, '[/email]') !== FALSE) {
$message = preg_replace("/\[email(=([a-z0-9\-_.+]+)@([a-z0-9\-_]+[.][a-z0-9\-_.]+))?\](.+?)\[\/email\]/ies", "parseemail('\\1', '\\4')", $message);
}
$message = str_replace(array(
'[/color]', '[/size]', '[/font]', '[/align]', '', '', '[s]', '[/s]', '[hr]', '[/p]',
'[i=s]', '', '', '', '', '
    ', '[list=1]', '[list=a]',
    '[list=A]', '
  • ', '
', '[indent]', '[/indent]', '[/float]' ), array(
'</font>', '</font>', '</font>', '</p>', '<strong>', '</strong>', '<strike>', '</strike>', '<hr class="solidline" />', '</p>', '<i class="pstatus">', '<i>',
'</i>', '<u>', '</u>', '<ul>', '<ul type="1" class="litype_1">', '<ul type="a" class="litype_2">',
'<ul type="A" class="litype_3">', '<li>', '</ul>', '<blockquote>', '</blockquote>', '</span>'
), preg_replace(array(
"/\[color=([#\w]+?)\]/i",
"/\[size=(\d+?)\]/i",
"/\[size=(\d+(\.\d+)?(px|pt|in|cm|mm|pc|em|ex|%)+?)\]/i",
"/\[font=([^\[\<]+?)\]/i",
"/\[align=(left|center|right)\]/i",
"/\[p=(\d{1,2}), (\d{1,2}), (left|center|right)\]/i",
"/\[float=(left|right)\]/i"

), array(
"<font color=\"\\1\">",
"<font size=\"\\1\">",
"<font style=\"font-size: \\1\">",
"<font face=\"\\1 \">",
"<p align=\"\\1\">",
"<p style=\"line-height: \\1px; text-indent: \\2em; text-align: \\3;\">",
"<span style=\"float: \\1;\">"
), $message));
$nest = 0;
while(strpos($msglower, '[table') !== FALSE && strpos($msglower, '') !== FALSE){
$message = preg_replace("/\[table(?:=(\d{1,4}%?)(?:,([\(\)%,#\w ]+))?)?\]\s*(.+?)\s*\[\/table\]/ies", "parsetable('\\1', '\\2', '\\3')", $message);
if(++$nest > 4) break;
}

if(strpos($msglower, '[/img]') !== FALSE) {
$message = preg_replace(array(
"/\[img\]\s*([^\[\<\r\n]+?)\s*\[\/img\]/ies",
"/\[img=(\d{1,4})[x|\,](\d{1,4})\]\s*([^\[\<\r\n]+?)\s*\[\/img\]/ies"
), array(
"bbcodeurl('\\1', '<img src=\"%s\" onload=\"thumbImg(this)\" alt=\"\" />')",
"parseimg('\\1', '\\2', '\\3')"
), $message);
}

unset($msglower);
return $message;
}
?>



分享到:
评论

相关推荐

    ubbcode函数

    Public Function UbbCode(strContent) Dim re Set re = New RegExp re.IgnoreCase = True re.Global = True ‘过滤危险脚本 re.Pattern = “([removed])” strContent = re.Replace(strContent, ...

    pjblog中的UBBCode.js

    ### pjblog中的UBBCode.js知识点解析 #### 一、概述 `pjblog中的UBBCode.js` 是一款专门用于PJBlog系统中的UBB(Ultimate Bulletin Board)代码编辑器的JavaScript脚本。该脚本由PuterJam(舜子)开发,并在2005年...

    DISCUZ论坛的UBB编辑器(增加灵活调用,支持ASP UBB解析)打包下载

    - **自定义集成**:该编辑器是从DISCUZ论坛中提取出来的,并进行了相应的修改和优化,因此非常适合想要在自己的网站或应用中集成类似功能的开发者。 ### 代码分析与使用方法 #### 核心知识点二:UBB编辑器的使用...

    UBB编辑器JS特效脚本说明

    - `printsample()` 函数展示了如何将UBB代码转换为HTML并显示出来。这个函数将各个UBB标签(如 `[center]`, `[link]`, `[size]`, `[u]`, `[b]`, `[i]`, `[color]`, `[img]` 等)转换为对应的HTML标签,并将转换后的...

    涂鸦板 for dvbbs 6.0

    随便传播~~~我是拿普通的涂鸦板改了来到动网来用~~ 有不明白的就到动网论坛插件专区来问~~我反正经常都在那里~~ 管理帐号和密码都是:admin 进去自己改相关信息~~ 解包出来后把111tuya.asp放在BBS根目录。...

    asp网上投票系统设计(LW+源代码+开题报告).zip

    尽管标题中提到的是ASP,但"java"的出现可能是由于该系统可能部分或全部采用了Java技术,或者是在讨论或实现过程中涉及到Java的相关知识。"源码"表明我们可以看到完整的编程代码,这对于学习和理解系统工作原理非常...

    长乐未央文章管理 HArticle V1.0 Build 20020422

    文章支持UBBCODE,UBBCODE的使用,请参照一般的论坛使用方法,本程序UBBCODE转化代码借鉴了动网论坛的代码,感谢动网论坛! 3. 可以说没有后台文件,所有管理均结合于前台,可进行移动整个版块的文章或者某篇文章到...

    付费贴插件 For 5.0Final

    在付费插件中,它可能包含与支付相关的JavaScript函数,比如弹出支付窗口、处理支付结果反馈以及动态更新用户权限等。 5. **简要说明.txt**:这个文档提供了插件的基本使用指南和注意事项,用户在安装和配置插件时...

    ASP+ACCESS学生论坛设计与实现(源代码+LW+开题报告).zip

    这个项目包含了从设计到实现的完整流程,提供了源代码,LW(可能是指论文或文档),以及开题报告,适合于学习和参考,特别是对于进行毕业设计或课业设计的学生。 描述中提到"基于java的程序源码就部分lw",这似乎...

    BIWEB商务智能网站系统 v5.8.1

    BIWEB商务智能网站系统是依托在ArthurXF企业应用级PHP开发框架上的大型网站系统,是由上海网务网络信息有限公司经历了5年不断的在各种大型项目中实践、总结、开发设计出来的一个快速开发、简单易用的面向对象的企业...

    GuestBook Therefor 2002 Build 0001

    其次,它采用了“UBBCode”(Uniform Bulletin Board Code),这是一种类似于HTML的标记语言,用于在文本中嵌入格式化元素。UBBCode让非技术用户也能方便地添加格式,如粗体、斜体、链接等,而不必直接接触复杂的...

    asp图书出售图书发行系统(源代码+LW).zip

    标题中的"asp图书出售图书发行系统(源代码+LW)"表明这是一个基于ASP技术的图书销售和发行系统,其中包含了源代码以及可能的文档或设计报告(LW可能指的是轻量级文档)。ASP(Active Server Pages)是微软开发的一种...

    JSP+JavaBean留言本_guestbook(毕设 + 课设).zip

    2. **UbbCode.class**:UBB(Understood BBCode)是一种轻量级的标记语言,用于格式化用户输入的文本,如在留言中插入表情或链接。 3. **FaceFilter.class**:可能是一个过滤器,用于解析UBB代码并将其转换为对应的...

    ASP医疗器械公司网站客户服务系统设计(源代码+LW).zip

    `inc\Dv_ClsMain.asp`和`inc\Dv_ubbcode.asp`可能包含了通用的类和函数库,`Dv_ClsMain.asp`可能是一些核心功能的封装,比如数据库操作、用户认证等,而`Dv_ubbcode.asp`可能是用于处理用户输入的BBCode(一种简化版...

    网上掏到的asp代码大全

    通常这样的文件会涵盖ASP的基础语法、常见函数、数据库连接、表单处理、会话控制等多个方面。通过阅读这份文档,开发者能够快速了解和学习ASP的核心技术,提升编程技能。 【说明.txt】 "说明.txt"文件可能是对...

    梦想年华JSP留言本_guestbook(毕设 + 课设).zip

    - `MD5.class`:MD5 是一种广泛使用的哈希函数,用于生成文件或数据的固定长度指纹。在这里,它可能用于生成用户的验证码或者存储密码的散列值,确保数据安全。 - `UbbCode.class`:UBB(Unified Bulletin Board ...

Global site tag (gtag.js) - Google Analytics