推荐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 和 MySQL 基础教程(四)
Oct 09 PHP
一个简单的MySQL数据浏览器
Oct 09 PHP
html中select语句读取mysql表中内容
Oct 09 PHP
PHP 开发环境配置(Zend Server安装)
Apr 28 PHP
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
Sep 28 PHP
php随机显示图片的简单示例
Feb 15 PHP
PHP解析目录路径的3个函数总结
Nov 18 PHP
php与Mysql的一些简单的操作
Feb 26 PHP
php实现XSS安全过滤的方法
Jul 29 PHP
PHP获取网页所有连接的方法(附demo源码下载)
Mar 30 PHP
总结对比php中的多种序列化
Aug 28 PHP
老生常谈PHP中的数据结构:DS扩展
Jul 17 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详解ASCII码对照表与字符转换
2011/12/05 PHP
PHP中explode函数和split函数的区别小结
2016/08/24 PHP
PHP基于接口技术实现简单的多态应用完整实例
2017/04/26 PHP
php实现的三个常用加密解密功能函数示例
2017/11/06 PHP
原生Js页面滚动延迟加载图片实现原理及过程
2013/06/24 Javascript
js获取光标位置和设置文本框光标位置示例代码
2014/01/09 Javascript
从零学JS之你需要了解的几本书
2014/05/19 Javascript
上传图片js判断图片尺寸和格式兼容IE
2014/09/01 Javascript
JSONObject使用方法详解
2015/12/17 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
bootstrap suggest下拉框使用详解
2017/04/10 Javascript
javaScript 逻辑运算符使用技巧整理
2017/05/03 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
2017/07/22 jQuery
nodejs使用async模块同步执行的方法
2019/03/02 NodeJs
Vue项目部署的实现(阿里云+Nginx代理+PM2)
2019/03/26 Javascript
Windows上node.js的多版本管理工具用法实例分析
2019/11/06 Javascript
Electron实现应用打包、自动升级过程解析
2020/07/07 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
2020/11/09 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
使用wxPython获取系统剪贴板中的数据的教程
2015/05/06 Python
Python使用Beautiful Soup包编写爬虫时的一些关键点
2016/01/20 Python
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
Python中的上下文管理器相关知识详解
2019/09/19 Python
python sklearn常用分类算法模型的调用
2019/10/16 Python
德国隐形眼镜店:LuckyLens
2018/07/29 全球购物
HOTEL INFO英国:搜索全球酒店
2019/08/08 全球购物
Python使用openpyxl复制整张sheet
2021/03/24 Python
市场安全管理制度
2014/01/26 职场文书
董事长秘书职责
2014/01/31 职场文书
元旦促销方案
2014/03/15 职场文书
《大海那边》教学反思
2014/04/09 职场文书
生态养殖创业计划书
2014/05/06 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
python使用pygame创建精灵Sprite
2021/04/06 Python
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
使用@Value值注入及配置文件组件扫描
2021/07/09 Java/Android