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 相关文章推荐
截获网站title标签之家内容的例子
Oct 09 PHP
PHP 字符串编码截取函数(兼容utf-8和gb2312)
May 02 PHP
PHP高级OOP技术演示
Aug 27 PHP
php array的学习笔记
May 10 PHP
LotusPhp笔记之:Logger组件的使用方法
May 06 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
Jun 29 PHP
64位windows系统下安装Memcache缓存
Dec 06 PHP
PHP实现适用于文件内容操作的分页类
Jun 15 PHP
Yii中的cookie的发送和读取
Jul 27 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
Yii1.1框架实现PHP极光推送消息通知功能
Sep 06 PHP
基于PHP实现发微博动态代码实例
Dec 11 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结合Ffmpeg快速搭建流媒体服务的实践记录
2018/10/31 PHP
在laravel框架中实现封装公共方法全局调用
2019/10/14 PHP
jquery ajax 检测用户注册时用户名是否存在
2009/11/03 Javascript
JS 事件绑定函数代码
2010/04/28 Javascript
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
Jquery仿淘宝京东多条件筛选可自行结合ajax加载示例
2013/08/28 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
2014/02/13 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
2015/09/14 Javascript
JavaScript实现图片滑动切换的代码示例分享
2016/03/06 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
设计模式中的facade外观模式在JavaScript开发中的运用
2016/05/18 Javascript
基于jQuery实现点击列表加载更多效果
2016/05/31 Javascript
CSS+jQuery实现简单的折叠菜单
2016/12/20 Javascript
JavaScript对象封装的简单实现方法(3种方法)
2017/01/03 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
微信小程序云开发 生成带参小程序码流程
2019/05/18 Javascript
vue + typescript + 极验登录验证的实现方法
2019/06/27 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
2020/08/19 Javascript
python实现音乐下载器
2018/04/15 Python
python实现两个经纬度点之间的距离和方位角的方法
2019/07/05 Python
python opencv如何实现图片绘制
2020/01/19 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
Python 创建守护进程的示例
2020/09/29 Python
Matplotlib配色之Colormap详解
2021/01/05 Python
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
巴西最大的在线约会网站:ParPerfeito
2018/07/11 全球购物
澳大利亚游乐场设备品牌:Lifespan Kids
2019/05/24 全球购物
工作作风建设心得体会
2014/10/22 职场文书
2015年派出所工作总结
2015/04/24 职场文书
优秀员工演讲稿
2019/06/21 职场文书
导游词之南迦巴瓦峰
2019/11/19 职场文书
Ruby处理YAML和json数据
2022/04/18 Ruby
SqlServer常用函数及时间处理小结
2023/05/08 SQL Server