推荐Discuz!5的PHP代码高亮显示与实现可运行代码


Posted in PHP onMarch 15, 2007

discuz!5.0论坛显示风格的php代码高亮显示插件,
把php代码进行语法着色,喜欢PHP的同志可以轻松的看代码啦。
同时添加了html代码运行功能。
此插件是在以前某位同志发布的Discuz!4的php代码高亮显示基础之上修改完成。
另外,本人的php学习进入了停滞状态,
希望有人能帮助我走出php的学习困境
My QQ:5642382  我的QQ群:2577162

功能:发贴时使用[php]php代码[/php]标记来高亮显示php代码,
      使用[runcode]Html代码[/runcode]标记来运行HTML代码(在客户端运行非服务器)。

插件添加步骤如下:
1.修改include/common.js
  查找

function copycode(obj) { 
        var rng = document.body.createTextRange(); 
        rng.moveToElementText(obj); 
        rng.scrollIntoView(); 
        rng.select(); 
        rng.execCommand("Copy"); 
        rng.collapse(false); 
}

在这个函数结束的下面添加:
function runCode(obj) {  
        var winname = window.open('', "_blank", '');  
        winname.document.open('text/html', 'replace');  
        winname.document.writeln(obj.value);  
        winname.document.close();  
}  function saveCode(obj) {  
        var winname = window.open('', '_blank', 'top=10000');  
        winname.document.open('text/html', 'replace');  
        winname.document.writeln(obj.value);  
        winname.document.execCommand('saveas','','code.htm');  
        winname.close();  
} 

2.修改include/discuzcode.func.php
  查找
        $discuzcodes['codecount']++; 
        return "[\tDISCUZ_CODE_$discuzcodes[pcodecount]\t]"; 
}

(注:也可以用Editplus直接查找到代码的第110行来进行下面的添加)
在下面继续添加:
//------- 添加 [runcode] Html代码 [/runcode] 来运行Html代码 
function runcodedisp($code) {  
        global $discuzcodes;  
        $discuzcodes['pcodecount']++;  
        $code = htmlspecialchars(str_replace('\\"', '"', preg_replace("/^[\n\r]*(.+?)[\n\r]*$/is", "\\1", $code)));  
        $discuzcodes['codehtml'][$discuzcodes['pcodecount']] = "<br><br><div class=\"smalltxt\" style=\"margin-left: 2em; margin-right: 2em\"><textarea name=\"runcode$discuzcodes[codecount]\" rows=\"1\" cols=\"95\" style=\"height:200px\">$code</textarea><br><input type=\"button\" value=\"运行代码\" onclick=\"runCode(runcode$discuzcodes[codecount])\"> <input type=\"button\" value=\"复制代码\" onclick=\"copycode(runcode$discuzcodes[codecount])\"> <input type=\"button\" value=\"另存代码\" onclick=\"saveCode(runcode$discuzcodes[codecount])\"> <script language=\"JavaScript\">ffcod = delpost.runcode$discuzcodes[codecount] .value; ffcod = ffcod.replace(/<br \/>/g,''); delpost.runcode$discuzcodes[codecount] .value = ffcod;</script> 提示:您可以先修改部分代码再运行</div><br>";  
        $discuzcodes['codecount']++;  
        return "[\tDISCUZ_CODE_$discuzcodes[pcodecount]\t]";  
}  //------- 添加  [php] php代码 [/php] 来高亮显示php代码,进行php语法着色 
function phpcodedisp($code) {  
        global $discuzcodes;  
        $discuzcodes['pcodecount']++;  
        $code = phphighlite(str_replace("\\\"", "\"", $code));  
        $discuzcodes['codehtml'][$discuzcodes['pcodecount']] = "<br><div class=\"msgheader\"><div class=\"right\"><a href=\"###\" class=\"smalltxt\" onclick=\"copycode($('phpcode$discuzcodes[codecount]'));\">[复制PHP代码]</a></div>PHP代码如下:</div><div class=\"msgborder\" id=\"phpcode$discuzcodes[codecount]\">$code</div><br>";  
        $discuzcodes['codecount']++;  
        return "[\tDISCUZ_CODE_$discuzcodes[pcodecount]\t]";  
}  
function phphighlite($code) {  
        if(!strpos($code,"<?\n") && !strpos($code,'<?') && substr($code,0,2) != '<?') {  
                $code = '<'.'?'.trim($code).' ?'.'>';  
                $addedtags = 1;  
        }  
        ob_start();  
        $oldlevel = error_reporting(0);  
        highlight_string($code);  
        error_reporting($oldlevel);  
        $buffer = ob_get_contents();  
        ob_end_clean();  
        if ($addedtags) {  
                $openingpos = strpos($buffer, '<?');  
                $closingpos = strrpos($buffer, '?');  
                $buffer = substr($buffer, 0, $openingpos).substr($buffer, $openingpos+5, $closingpos-($openingpos+5)).substr($buffer, $closingpos+5);  
        }  
        $buffer = str_replace('"', "\"", $buffer);  
        $buffer = str_replace('<br />', '', $buffer);  
        return $buffer;  
}  
//------- 结束

3.继续修改include/discuzcode.func.php
  查找
$message = preg_replace("/\s*\[code\](.+?)\[\/code\]\s*/ies", "codedisp('\\1')", $message);

在其下面继续添加:
//------- runcode  
$message = preg_replace("/\s*\[runcode\](.+?)\[\/runcode\]\s*/ies", "runcodedisp('\\1')", $message);  
//------- php  
$message = preg_replace("/\s*\[php\](.+?)\[\/php\]\s*/ies", "phpcodedisp('\\1')", $message);
PHP 相关文章推荐
第十四节 命名空间 [14]
Oct 09 PHP
十天学会php之第三天
Oct 09 PHP
mysql 的 like 问题,超强毕杀记!!!
Jan 18 PHP
PHP的分页功能
Mar 21 PHP
php将会员数据导入到ucenter的代码
Jul 18 PHP
php下清空字符串中的HTML标签的代码
Sep 06 PHP
一个PHP缓存类代码(附详细说明)
Jun 09 PHP
PHP 图片水印类代码
Aug 27 PHP
2014过年倒计时示例
Jan 31 PHP
php中的ini配置原理详解
Oct 14 PHP
分享一个漂亮的php验证码类
Sep 29 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
Feb 28 PHP
Linux下进行MYSQL编程时插入中文乱码的解决方案
Mar 15 #PHP
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
Mar 15 #PHP
一个简单的PHP&amp;MYSQL留言板源码
Jul 19 #PHP
利用PHP和AJAX创建RSS聚合器的代码
Mar 13 #PHP
手把手教你使用DedeCms的采集的图文教程
Mar 11 #PHP
PHP中的CMS的涵义
Mar 11 #PHP
dedecms 制作模板中使用的全局标记图文教程
Mar 11 #PHP
You might like
php解析html类库simple_html_dom(详细介绍)
2013/07/05 PHP
php的XML文件解释类应用实例
2014/09/22 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
2019/12/13 PHP
javascript中window.event事件用法详解
2012/12/11 Javascript
IE不支持getElementsByClassName最终完美解决方案
2012/12/17 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
JSONP获取Twitter和Facebook文章数的具体步骤
2014/02/24 Javascript
window.location.href的用法(动态输出跳转)
2014/08/09 Javascript
JavaScript检查某个function是否是原生代码的方法
2014/08/20 Javascript
javascript中异常处理案例(推荐)
2016/10/03 Javascript
fullCalendar中文API官方文档
2017/02/07 Javascript
jQuery按需加载轮播图(web前端性能优化)
2017/02/17 Javascript
jQuery修改DOM结构_动力节点Java学院整理
2017/07/05 jQuery
初识 Vue.js 中的 *.Vue文件
2017/11/22 Javascript
浅谈VUE-CLI脚手架热更新太慢的原因和解决方法
2018/09/28 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
解决vue-router 切换tab标签关闭时缓存问题
2020/07/22 Javascript
js实现飞机大战游戏
2020/08/26 Javascript
JavaScript async/await原理及实例解析
2020/12/02 Javascript
[46:38]完美世界DOTA2联赛PWL S2 Magma vs PXG 第三场 11.28
2020/12/02 DOTA
Python中for循环控制语句用法实例
2015/06/02 Python
删除python pandas.DataFrame 的多重index实例
2018/06/08 Python
python的pyecharts绘制各种图表详细(附代码)
2019/11/11 Python
使用Tkinter制作信息提示框
2020/02/18 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
2020/03/04 Python
Python如何将字符串转换为日期
2020/07/31 Python
Django Model层F,Q对象和聚合函数原理解析
2020/11/12 Python
HTML5标签使用方法详解
2015/11/27 HTML / CSS
澳洲的服装老品牌:SABA
2018/02/06 全球购物
一道写SQL的面试题和答案
2013/11/19 面试题
支行行长竞聘演讲稿
2014/05/15 职场文书
儿园租房协议书范本
2014/12/02 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书
新人入职感言
2015/07/31 职场文书
2015团员个人年度总结
2015/11/24 职场文书
能用CSS实现的就不要麻烦JavaScript了
2021/10/05 HTML / CSS