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 相关文章推荐
我的论坛源代码(四)
Oct 09 PHP
中英文字符串翻转函数
Dec 09 PHP
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
Jun 13 PHP
PHP批量采集下载美女图片的实现代码
Jun 03 PHP
CodeIgniter框架中_remap()使用方法2例
Mar 10 PHP
PHP根据两点间的经纬度计算距离
Oct 31 PHP
php递归调用删除数组空值元素的方法
Apr 28 PHP
php中PDO方式实现数据库的增删改查
May 17 PHP
php面向对象编程self和static的区别
May 08 PHP
PHP 500报错的快速解决方法
Dec 14 PHP
PHP调用API接口实现天气查询功能的示例
Sep 21 PHP
PHP实现通过CURL上传文件功能示例
May 30 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&amp;java(一)
2006/10/09 PHP
用PHP写的MySQL数据库用户认证系统代码
2007/03/22 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
2016/12/23 PHP
分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
2012/10/12 Javascript
基于jquery实现点击左右按钮图片横向滚动
2013/04/11 Javascript
根据当前时间在jsp页面上显示上午或下午
2014/08/18 Javascript
jQuery判断元素上是否绑定了指定事件的方法
2015/03/17 Javascript
jQuery EasyUI Accordion可伸缩面板组件使用详解
2017/02/28 Javascript
jquery+css实现Tab栏切换的代码实例
2019/05/14 jQuery
Vue组件实现触底判断
2019/06/26 Javascript
关于layui 弹出层一闪而过就消失的解决方法
2019/09/09 Javascript
js实现贪吃蛇小游戏
2019/10/29 Javascript
[02:17]2016国际邀请赛中国区预选赛VG战队领队采访
2016/06/26 DOTA
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
django+mysql的使用示例
2018/11/23 Python
windows下Python安装、使用教程和Notepad++的使用教程
2019/10/06 Python
python将数组n等分的实例
2019/12/02 Python
python实现从wind导入数据
2019/12/03 Python
python+requests接口自动化框架的实现
2020/08/31 Python
如何基于Django实现上下文章跳转
2020/09/16 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
css3实现的多级渐变下拉菜单导航效果代码
2015/08/31 HTML / CSS
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
GUESS盖尔斯法国官网:美国时尚品牌
2016/09/23 全球购物
港湾网络笔试题
2014/04/19 面试题
写给女生的道歉信
2014/01/14 职场文书
音乐幼师求职信
2014/07/09 职场文书
2014年电话客服工作总结
2014/12/09 职场文书
导游词范文
2015/02/13 职场文书
黄河绝恋观后感
2015/06/08 职场文书
李强为自己工作观后感
2015/06/11 职场文书
少先队入队仪式主持词
2015/07/04 职场文书
六五普法先进个人主要事迹材料
2015/11/03 职场文书
《实心球》教学反思
2016/02/23 职场文书