Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)


Posted in PHP onJanuary 29, 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);
}
在这个函数结束的下面添加:

[Copy to clipboard] [ - ]CODE:
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
  查找

[Copy to clipboard] [ - ]CODE:
        $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);
在其下面继续添加:

[Copy to clipboard] [ - ]CODE:
//------- runcode 
$message = preg_replace("/\s*\[runcode\](.+?)\[\/runcode\]\s*/ies", "runcodedisp('\\1')", $message); 
//------- php 
$message = preg_replace("/\s*\[php\](.+?)\[\/php\]\s*/ies", "phpcodedisp('\\1')", $message);
[ 本帖最后由 yzxicq0 于 2006-9-4 17:11 编辑 ]

PHP 相关文章推荐
如何在PHP中使用Oracle数据库(5)
Oct 09 PHP
40个迹象表明你还是PHP菜鸟
Sep 29 PHP
PHPnow安装服务[apache_pn]失败的问题的解决方法
Sep 10 PHP
php 短链接算法收集与分析
Dec 30 PHP
PHP 转义使用详解
Jul 15 PHP
php的array数组和使用实例简明教程(容易理解)
Mar 20 PHP
php多任务程序实例解析
Jul 19 PHP
php实现数组中索引关联数据转换成json对象的方法
Jul 08 PHP
php实现json编码的方法
Jul 30 PHP
PHP实现获取某个月份周次信息的方法
Aug 11 PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
Sep 22 PHP
PHP里的$_GET数组介绍
Mar 22 PHP
解决控件遮挡问题:关于有窗口元素和无窗口元素
Jan 28 #PHP
获得Google PR值的PHP代码
Jan 28 #PHP
一键删除顽固的空文件夹 软件下载
Jan 26 #PHP
php中通过smtp发邮件的类,测试通过
Jan 22 #PHP
php5.2.0内存管理改进
Jan 22 #PHP
php中截取字符串支持utf-8
Jan 18 #PHP
php中的登陆login
Jan 18 #PHP
You might like
第十节 抽象方法和抽象类 [10]
2006/10/09 PHP
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
PHP 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
PHP实现简单实用的分页类代码
2016/04/08 PHP
浅析PHP中的i++与++i的区别及效率
2016/06/15 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
2017/08/11 PHP
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
2013/04/26 Javascript
浅谈javascript的call()、apply()、bind()的用法
2016/02/21 Javascript
一些实用性较高的js方法
2016/04/19 Javascript
AngularJS 过滤器(自带和自建)详解
2016/09/19 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
JavaScript两个变量交换值的实现方法
2017/03/01 Javascript
用vue构建多页面应用的示例代码
2017/09/20 Javascript
Vue异步加载about组件
2017/10/31 Javascript
让webpack+vue-cil项目不再自动打开浏览器的方法
2018/09/27 Javascript
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
微信小程序云开发之模拟后台增删改查
2019/05/16 Javascript
vue-router的两种模式的区别
2019/05/30 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
Element Notification通知的实现示例
2020/07/27 Javascript
PyQt5每天必学之QSplitter实现窗口分隔
2018/04/19 Python
解决python写入带有中文的字符到文件错误的问题
2019/01/31 Python
HTML5 3D书本翻页动画的实现示例
2019/08/28 HTML / CSS
英国和世界各地鲜花速递专家:Arena Flowers
2018/02/10 全球购物
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
公司联欢会策划方案
2014/05/19 职场文书
软环境建设心得体会
2014/09/09 职场文书
2014年敬老院工作总结
2014/12/08 职场文书
2015年实习单位评语
2015/03/25 职场文书
运动员入场前导词
2015/07/20 职场文书
在K8s上部署Redis集群的方法步骤
2021/04/27 Redis
MySQL利用UNION连接2个查询排序失效详解
2021/11/20 MySQL
MYSQL事务的隔离级别与MVCC
2022/05/25 MySQL