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 Sql Server连接失败问题及解决办法
Aug 07 PHP
PHP 配置open_basedir 让各虚拟站点独立运行
Nov 12 PHP
php对mongodb的扩展(初出茅庐)
Nov 11 PHP
基于curl数据采集之单页面并行采集函数get_htmls的使用
Apr 28 PHP
用Json实现PHP与JavaScript间数据交换的方法详解
Jun 20 PHP
PHP 解决session死锁的方法
Jun 20 PHP
php 检查电子邮件函数(自写)
Jan 16 PHP
php命名空间学习详解
Feb 27 PHP
php的sso单点登录实现方法
Jan 08 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
May 03 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
Nov 13 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 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
PHP中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
PHP可变变量学习小结
2015/11/29 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
2016/12/29 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
2018/10/14 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
Javascript 日期处理之时区问题
2009/10/08 Javascript
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
javascript中的107个基础知识收集整理 推荐
2010/03/29 Javascript
防止按钮在短时间内被多次点击的方法
2014/03/10 Javascript
js控制鼠标事件移动及移出效果显示
2014/10/19 Javascript
jQuery前端分页示例分享
2015/02/10 Javascript
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
2015/12/14 Javascript
JS组件系列之使用HTML标签的data属性初始化JS组件
2016/09/14 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
JavaScript中document.referrer的用法详解
2017/07/04 Javascript
微信小程序引用公共js里的方法的实例详解
2017/08/17 Javascript
Angular 中使用 FineReport不显示报表直接打印预览
2019/08/21 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
Python 正则表达式入门(初级篇)
2016/12/07 Python
python3实现抓取网页资源的 N 种方法
2017/05/02 Python
Python3 加密(hashlib和hmac)模块的实现
2017/11/23 Python
Python实现FTP文件传输的实例
2019/07/07 Python
python实现吃苹果小游戏
2020/03/21 Python
numpy的Fancy Indexing和array比较详解
2020/06/11 Python
如何在 Matplotlib 中更改绘图背景的实现
2020/11/26 Python
python爬虫中采集中遇到的问题整理
2020/11/27 Python
惠普加拿大在线商店:HP加拿大
2017/09/15 全球购物
企划专员岗位职责
2013/12/09 职场文书
党校学习思想汇报
2014/01/06 职场文书
《都江堰》教学反思
2014/02/07 职场文书
党的群众路线教育实践活动个人批评与自我批评
2014/10/16 职场文书
合作意向书范本
2019/04/17 职场文书