PHP代码加亮器,纯JS制作 可以啊,想法不错,那我以后不是可以在网站上写PHP程序了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.icebergweb.com/code/highlight/hightlightPHPCode.js大哥,你的叶面有问题啊.... 地址写错了下载地址是:http://www.icebergweb.com/code/highlight/highlightPHPCode.js http://www.51forbes.net/dhtml/js_highlight/ :) 偶正在找这方面东西,打算用php做个多语言的。。down下来看看。 ^____^ 谁说意义不大,我正需要语法解析器,我要做个自动整理php源程序格式的东东呢...这样就不用看被dw整得乱乱的代码头晕了:p DOWN下学习先,不错的东东...算法有待改进,效率不是很高哎 大家测试的时候有没有发现BUG??我暂时还没发现 这个东东离开PHP平台之后是很有用武之地的,比如那些静态页面,用JS之后就不会变得很大了,大家觉得呢?代码多了速度很慢哦,稻草人有没有其它好方法吗? 楼主,我之前那种方法要是能再拓展的话,效率是高多了。我帖出来大家讨论一下吧。。现在这种方法有两个问题,一是多行注释的时候序列号也会被着色,二是引号中的=号和其它号不应该被着色<style type="text/css">#CODE { padding-right: 0.5em; margin-top: 1em; font-size: 9pt; margin-bottom: 1em; margin-left: 0pt; padding-top: 0.5em; font-family: Courier New; background-color: #FFFFFF; color: #465584; border:1px solid #000000; border-left:6px solid #666666; }</style><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr> <td id='CODE'><?php<br> /*hello<br> */<br> $string = implode("\n", $array);//拆分<br> $fp = fopen("test.txt", "w");<br> #写入<br> fwrite($fp, $string);<br> $abc = "keysdf = sdf (sdf)<br> sdkfjsdf klj l sdfj <br> abc "; <br> ?> </td></tr></table><script language="javascript">var bb_code_li_1 = '<li>';var bb_code_li_2 = '</li>';var text = document.all.CODE.innerHTML;text = text.replace(/<br>/gi, "\n");text = text.replace(/(\"(.|\n)*?\")/g, "<font color=red>$1</font>");text = text.replace(/(\'.*?\')/g, "<font color=red>$1</font>");text = text.replace(/([^color]=|\(|\)|,)/gi, "<font color=green>$1</font>");text = text.replace(/(\/\*(\n|\t|.)*\*\/|\/\/.*\n|#.*\n)/gi, "<font color=#ff9900>$1</font>");text = text.replace(/\n/g, "\n" + bb_code_li_2 + bb_code_li_1);text = '<ol><li>' + text + '</ol>';document.all.CODE.innerHTML = "<font color=#0000ff>"+text+"</font>";//alert(text);</script> to keaizhong(可爱钟) 你这个怎么实现关键字加亮? 同样的原理可以实现关键字的加亮吧。和你那个一样,定义一个关键字的数组。var keyword = [ "var", "this", "true"....];var keys = keyword.join("|");var reg = new RegExp("\\b("+keys+")\\b","g");text.replace(reg,"<font color=red>$1</font>");你看看这样子如何?JS里的些东东我不是很了解,我也是参考别人的。 谢谢ice_berg16 (寻梦的稻草人) up! 回复人: ice_berg16(寻梦的稻草人) ( ) 信誉:125 2005-06-30 18:59:00 得分: 0 你这个肯定不行,关键字也可能存在字符串或注释中,你这样会把所有的关键字都加亮了 确实如此,所以要解决这个问题就可以了,在效率上会比较高一些。谁正则厉害一点的,可以试试看,我已经想尽了。或者用另外的折中办法来解决。 我是逐个字符读取的,只有遇到字符串或注释时才会查找结束标记,代码多时速度自然就下降了,不知道单用正则能否实现。估计困难。单用正则不能实现,但 正则+排队 可以很好的解决问题。你可以看一下fason(咖啡人生)的程序,虽然做了扰码处理,但解开还是很容易的记得前些时候我们和他在javascrip版面讨论过这个事情 还是存在一点问题输入<?phpecho "<p> sadadas</p>";?><p> sadadas</p>显示<?php echo "<p> sadadas</p>"; ?> <p> sadadas<p> 我觉得效果还是不错的,如果是我也是会采用逐个字符读取的判断的,不知道多次正则的效率如何了正则的效率并不是非常高的fason(咖啡人生)的程序不错,怎么不给个打包下载地址啊,还要自己看源代码判断注释可以先把 //和/* */的注释 用特殊的符号替换标记下 进行着色的时候 对有这些特殊符号的,不着色处理就可以了啊我个人的思路,不知道大家理解没有 bug报告/*aaaaaaa/*/*/变为/*aaaaaaa/*/*而且颜色不对建议还是用我建议的办法,先正则 标记所有的注释 function JsHighlight(text) {var $delimiter = ",(){}[]-+*%/=\"'~!&|<>?:;.";var $keywords = "abstract|base|bool|boolean|break|byte|case|catch|char|class|const|continue|default|delete|delegate|do|double|else|extends|false|final|finally|float|for|foreach|function|goto|if|implements|import|in|instanceof|int|interface|long|namespace|native|new|null|number|override|package|private|protected|public|readonly|return|seal|short|static|string|super|switch|synchronized|this|throw|throws|transient|true|try|typeof|var|void|while|with";var $specialwords = "Array|Boolean|Date|Error|Function|Math|Number|String|Object|Option|RegExp|prototype|constructor|window|document";var $S = "/*", $E = "*/";var $C = "//";var $Q1 = "\"", $Q2 = "'";var $comment = [];function parse(text) {return _unescape(parseSpecialwords(parseKeywords(parseComment(_escape(text)))));};function parseComment(text) {var i, j, length;i = text.indexOf($Q1);while (i>=0) {j = text.indexOf($Q1,i+1);if (j"+text.substring(i, j+1)+"";text = text.substr(0, Math.max(0,i)) + "@" + length + text.substr(j+1);i = text.indexOf($Q1);}i = text.indexOf($Q2);while (i>=0) {j = text.indexOf($Q2,i+1);if (j"+text.substring(i, j+1)+"";text = text.substr(0, Math.max(0,i)) + "@" + length + text.substr(j+1);i = text.indexOf($Q2);}i = text.indexOf($S);while (i>=0) {j = text.indexOf($E,i+2);if (j > i) {length = $comment.length;$comment[length] = ""+text.substring(i, j+2)+"";text = text.substr(0, Math.max(0,i)) + "@" + length + text.substr(j+2);}i = text.indexOf($S, i+2);}i = text.indexOf($C);while (i>=0) {j = text.indexOf("\n", i+2);if (j < 0) j = text.length-1;if (j > i) {length = $comment.length;$comment[length] = ""+text.substring(i, j-1)+"";text = text.substr(0, Math.max(0,i)) + "@" + length + text.substr(j);};i = text.indexOf($C, i+2);}return text;};function _delimiter() {return "^|$|\\s|\\t|\\" + $delimiter.split("").join("|\\");};function parseKeywords(text) {var regexp = new RegExp("("+_delimiter()+")("+$keywords+")("+_delimiter()+")", "g");return text.replace(regexp, "$1$2$3");};function parseSpecialwords(text) {var regexp = new RegExp("("+_delimiter()+")("+$specialwords+")("+_delimiter()+")", "g");return text.replace(regexp, "$1$2$3");};function _escape(text) {text = text.replace(/@/g, "\\x40");text = text.replace(/ /g, " ");text = text.replace(//g, ">");text = text.replace(/\x5c\x5c/g, "\\");text = text.replace(/\x5c\x22/g, "\"");text = text.replace(/\x5c\x27/g, "\'");return text;};function _unescape(text) {for (var i=$comment.length-1; i>=0; i--)text = text.replace("@"+i, $comment[i]);if(isIE){text = text.replace(/\n/g, " ");};text = text.replace(/\t/g, " ");text = text.replace(/\\x40/g, "@");return text;};return parse(text);} 上面是阿信那个地址解密的代码,用了很多正则的,可以参考下啊 /*aaaaaaa/*/*/变为/*aaaaaaa/*/*不是bug这个东西不是语法分析器,你必须给他合法的代码!<?php/*aaaaaaa/*/*/?>Parse error: syntax error, unexpected '*' in .... 购买信息港程序 评分的半颗星实现探讨 php中定义数组的时候能用变量来动态定义么? 请教一个树节点的删除算法,请大家过来看看吧 ckeditor放在apache目录里,报错ckeditor未定义【求助】 高手请教!!! 问一问“唠叨”大哥一些数据库持续连接及Session问题 关于mail(), 求助!如何实现CSDN里的分页显示! PHP做切片,求助 200分求购PHP网上书店源代码 新闻页计数器session防刷新很有效,可再访问其他新闻页面计数也不会增加了,因为session没有被清空,谁有好办法,谢谢
大哥,你的叶面有问题啊....
下载地址是:
http://www.icebergweb.com/code/highlight/highlightPHPCode.js
这样就不用看被dw整得乱乱的代码头晕了:p
我暂时还没发现
我帖出来大家讨论一下吧。。现在这种方法有两个问题,
一是多行注释的时候序列号也会被着色,
二是引号中的=号和其它号不应该被着色
<style type="text/css">
#CODE { padding-right: 0.5em; margin-top: 1em; font-size: 9pt; margin-bottom: 1em; margin-left: 0pt; padding-top: 0.5em; font-family: Courier New; background-color: #FFFFFF; color: #465584; border:1px solid #000000; border-left:6px solid #666666; }
</style>
<table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr>
<td id='CODE'><?php<br>
/*hello<br>
*/<br>
$string = implode("\n", $array);//拆分<br>
$fp = fopen("test.txt", "w");<br>
#写入<br>
fwrite($fp, $string);<br>
$abc = "keysdf = sdf (sdf)<br>
sdkfjsdf klj l sdfj <br>
abc
"; <br>
?>
</td>
</tr></table><script language="javascript">
var bb_code_li_1 = '<li>';
var bb_code_li_2 = '</li>';
var text = document.all.CODE.innerHTML;
text = text.replace(/<br>/gi, "\n");
text = text.replace(/(\"(.|\n)*?\")/g, "<font color=red>$1</font>");
text = text.replace(/(\'.*?\')/g, "<font color=red>$1</font>");
text = text.replace(/([^color]=|\(|\)|,)/gi, "<font color=green>$1</font>");
text = text.replace(/(\/\*(\n|\t|.)*\*\/|\/\/.*\n|#.*\n)/gi, "<font color=#ff9900>$1</font>");
text = text.replace(/\n/g, "\n" + bb_code_li_2 + bb_code_li_1);
text = '<ol><li>' + text + '</ol>';
document.all.CODE.innerHTML = "<font color=#0000ff>"+text+"</font>";
//alert(text);
</script>
你这个怎么实现关键字加亮?
和你那个一样,定义一个关键字的数组。
var keyword = [ "var", "this", "true"....];
var keys = keyword.join("|");
var reg = new RegExp("\\b("+keys+")\\b","g");
text.replace(reg,"<font color=red>$1</font>");你看看这样子如何?
JS里的些东东我不是很了解,我也是参考别人的。
up!
你这个肯定不行,关键字也可能存在字符串或注释中,你这样会把所有的关键字都加亮了
确实如此,所以要解决这个问题就可以了,在效率上会比较高一些。谁正则厉害一点的,可以试试看,我已经想尽了。
或者用另外的折中办法来解决。
代码多时速度自然就下降了,
不知道单用正则能否实现。估计困难。单用正则不能实现,但 正则+排队 可以很好的解决问题。
你可以看一下fason(咖啡人生)的程序,虽然做了扰码处理,但解开还是很容易的
记得前些时候我们和他在javascrip版面讨论过这个事情
输入
<?php
echo "<p> sadadas</p>";
?>
<p> sadadas</p>显示
<?php
echo "<p> sadadas</p>";
?>
<p> sadadas<p>
正则的效率并不是非常高的fason(咖啡人生)的程序不错,怎么不给个打包下载地址啊,还要自己看源代码判断注释
可以先把 //
和/* */
的注释 用特殊的符号替换标记下
进行着色的时候 对有这些特殊符号的,不着色处理就可以了啊
我个人的思路,不知道大家理解没有
/*aaaaaaa/*/*/
变为
/*aaaaaaa/*/*
而且颜色不对建议还是用我建议的办法,先正则 标记所有的注释
");};text = text.replace(/\t/g, " ");text = text.replace(/\\x40/g, "@");return text;};return parse(text);} 上面是阿信那个地址解密的代码,用了很多正则的,可以参考下啊
变为
/*aaaaaaa/*/*
不是bug
这个东西不是语法分析器,你必须给他合法的代码!<?php
/*aaaaaaa/*/*/
?>
Parse error: syntax error, unexpected '*' in ....