推荐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中10个不常见却非常有用的函数
Mar 21 PHP
php中实现记住密码自动登录的代码
Mar 02 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
Sep 22 PHP
ThinkPHP行为扩展Behavior应用实例详解
Jul 22 PHP
PHP面向对象精要总结
Nov 07 PHP
PHP使用memcache缓存技术提高响应速度的方法
Dec 26 PHP
php中ob函数缓冲机制深入理解
Aug 03 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
Dec 14 PHP
php session实现多级目录存放实现代码
Feb 03 PHP
PHP实现简易blog的制作
Oct 24 PHP
PHP静态成员变量
Feb 14 PHP
Yii2设置默认控制器的两种方法
May 19 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加速 eAccelerator配置和使用指南
2009/06/05 PHP
PHP array_multisort()函数的使用札记
2011/07/03 PHP
解析如何去掉CodeIgniter URL中的index.php
2013/06/25 PHP
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
JavaScript NaN和Infinity特殊值 [译]
2012/09/20 Javascript
JavaScript控制Session操作方法
2013/01/17 Javascript
jqplot通过ajax动态画折线图的方法及思路
2013/12/08 Javascript
AngularJS入门教程(零):引导程序
2014/12/06 Javascript
javascript实现日期时间动态显示示例代码
2015/09/08 Javascript
ES6的新特性概览
2016/03/10 Javascript
jQuery简单设置文本框回车事件的方法
2016/08/01 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
微信小程序 富文本转文本实例详解
2016/10/24 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
Node.js+Express+MySql实现用户登录注册功能
2017/07/10 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
vue-自定义组件传值的实例讲解
2018/09/18 Javascript
使用electron将vue-cli项目打包成exe的方法
2018/09/29 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
2019/10/26 Javascript
Vue+webpack实现懒加载过程解析
2020/02/17 Javascript
Python绘制七段数码管实例代码
2017/12/20 Python
Python中max函数用于二维列表的实例
2018/04/03 Python
python读取文本中数据并转化为DataFrame的实例
2018/04/10 Python
Scrapy框架使用的基本知识
2018/10/21 Python
Python实现的序列化和反序列化二叉树算法示例
2019/03/02 Python
python os模块简单应用示例
2019/05/23 Python
python使用递归的方式建立二叉树
2019/07/03 Python
Python在cmd上打印彩色文字实现过程详解
2019/08/07 Python
捷克移动配件网上商店:ProMobily.cz
2019/03/15 全球购物
毕业晚会主持词
2014/03/24 职场文书
优秀学生干部个人事迹材料
2014/06/02 职场文书
2014年团委工作总结
2014/11/13 职场文书
清明节文明祭祀倡议书
2015/04/28 职场文书
有关信念的名言语录集锦
2019/12/06 职场文书
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle