推荐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 字符串编码截取函数(兼容utf-8和gb2312)
May 02 PHP
解析dedecms空间迁移步骤详解
May 15 PHP
php中file_get_content 和curl以及fopen 效率分析
Sep 19 PHP
php获取Google机器人访问足迹的方法
Apr 15 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
May 12 PHP
Thinkphp连表查询及数据导出方法示例
Oct 15 PHP
遍历echsop的region表形成缓存的程序实例代码
Nov 01 PHP
php使用file函数、fseek函数读取大文件效率对比分析
Nov 04 PHP
PHP实现类似题库抽题效果
Aug 16 PHP
使用PHPExcel导出Excel表
Sep 08 PHP
PHP递归算法的简单实例
Feb 28 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Jan 22 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小偷的核心程序
2007/04/09 PHP
php输出表格的实现代码(修正版)
2010/12/29 PHP
php学习之变量的使用
2011/05/29 PHP
深入了解PHP类Class的概念
2012/06/14 PHP
PHP实现数字补零功能的2个函数介绍
2014/05/12 PHP
php使用curl获取https请求的方法
2015/02/11 PHP
PHP用continue跳过本次循环中剩余代码的注意点
2017/06/27 PHP
javascript学习笔记(五) Array 数组类型介绍
2012/06/19 Javascript
JavaScript实现复制功能各浏览器支持情况实测
2013/07/18 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
node.js中的fs.stat方法使用说明
2014/12/16 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
2015/03/05 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
Vue波纹按钮组件制作
2018/04/30 Javascript
详解微信小程序开发用户授权登陆
2019/04/24 Javascript
微信小程序实现动态列表项的顺序加载动画
2019/07/25 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
小程序实现录音上传功能
2019/11/22 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
node+multer实现图片上传的示例代码
2020/02/18 Javascript
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
2020/04/07 Javascript
ESLint 是如何检查 .vue 文件的
2020/11/30 Vue.js
Python中实现结构相似的函数调用方法
2015/03/10 Python
Django实现表单验证
2018/09/08 Python
Python 读取WAV音频文件 画频谱的实例
2020/03/14 Python
keras 指定程序在某块卡上训练实例
2020/06/22 Python
python实现图片转换成素描和漫画格式
2020/08/19 Python
python Matplotlib模块的使用
2020/09/16 Python
strstr()的简单实现
2013/09/26 面试题
优秀毕业生找工作自荐信
2014/06/23 职场文书
大学生入党自荐书
2015/03/05 职场文书
2015年后备干部工作总结
2015/05/15 职场文书
离婚律师函范本
2015/05/27 职场文书
幼儿园小班班务总结
2015/08/03 职场文书
2019年最新证婚词精选集!
2019/06/28 职场文书
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫