推荐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 相关文章推荐
PHP也可以?成Shell Script
Oct 09 PHP
[原创]效率较高的php下读取文本文件的代码
Jul 02 PHP
PHP 文件缓存的性能测试
Apr 25 PHP
APACHE的AcceptPathInfo指令使用介绍
Jan 18 PHP
详解PHP中strlen和mb_strlen函数的区别
Mar 07 PHP
PHP中mysql_field_type()函数用法
Nov 24 PHP
Nginx下配置codeigniter框架方法
Apr 07 PHP
PHP面向对象自动加载机制原理与用法分析
Oct 14 PHP
详解PHP防止直接访问.php 文件的实现方法
Jul 28 PHP
PHP实现的用户注册表单验证功能简单示例
Feb 25 PHP
Smarty模板配置实例简析
Jul 20 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
Jun 03 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
2020年4月放送!《Princess Connect Re:Dive》制作组 & 角色声优公开!
2020/03/06 日漫
php读取纯真ip数据库使用示例
2014/01/26 PHP
PHP中set error handler函数用法小结
2015/11/11 PHP
php多进程模拟并发事务产生的问题小结
2018/12/07 PHP
JS获取IUSR_机器名和IWAM_机器名帐号的密码
2006/12/06 Javascript
extjs grid取到数据而不显示的解决
2008/12/29 Javascript
响应鼠标变换表格背景或者颜色的代码
2009/03/30 Javascript
js的匿名函数使用介绍
2013/12/11 Javascript
原生JavaScript实现合并多个数组示例
2014/09/21 Javascript
每天一篇javascript学习小结(Boolean对象)
2015/11/12 Javascript
原生javascript实现解析XML文档与字符串
2016/03/01 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
JavaScript判断是否是微信浏览器
2016/06/13 Javascript
js实现String.Fomat的实例代码
2016/09/02 Javascript
jquery动态添加文本并获取值的方法
2016/10/12 Javascript
JS传参及动态修改页面布局
2017/04/13 Javascript
JS实现读取xml内容并输出到div中的方法示例
2018/04/19 Javascript
vue项目中引入vue-datepicker插件的详解
2019/05/14 Javascript
php结合js实现多条件组合查询
2019/05/28 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
2019/08/27 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
解决Python传递中文参数的问题
2015/08/04 Python
对pandas中to_dict的用法详解
2018/06/05 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
2020/02/20 Python
利用CSS3的checked伪类实现OL的隐藏显示的方法
2010/12/18 HTML / CSS
CSS3的first-child选择器实战攻略
2016/04/28 HTML / CSS
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
香港卓悦化妆品官网:BONJOUR
2017/09/21 全球购物
英国屋顶用品和材料超市:Roofing Supplies UK
2019/08/24 全球购物
发展部经理职责规定
2014/02/22 职场文书
需求分析说明书
2014/05/09 职场文书
教师批评与自我批评心得体会
2014/10/16 职场文书
nginx服务器的下载安装与使用详解
2021/08/02 Servers
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL