可以啊,想法不错,那我以后不是可以在网站上写PHP程序了。

解决方案 »

  1.   

    http://www.icebergweb.com/code/highlight/hightlightPHPCode.js
    大哥,你的叶面有问题啊....
      

  2.   

    地址写错了
    下载地址是:
    http://www.icebergweb.com/code/highlight/highlightPHPCode.js
      

  3.   

    http://www.51forbes.net/dhtml/js_highlight/
      

  4.   

    :) 偶正在找这方面东西,打算用php做个多语言的。。down下来看看。 ^____^
      

  5.   

    谁说意义不大,我正需要语法解析器,我要做个自动整理php源程序格式的东东呢...
    这样就不用看被dw整得乱乱的代码头晕了:p
      

  6.   

    DOWN下学习先,不错的东东...算法有待改进,效率不是很高哎
      

  7.   

    大家测试的时候有没有发现BUG??
    我暂时还没发现
      

  8.   

    这个东东离开PHP平台之后是很有用武之地的,比如那些静态页面,用JS之后就不会变得很大了,大家觉得呢?代码多了速度很慢哦,稻草人有没有其它好方法吗?
      

  9.   

    楼主,我之前那种方法要是能再拓展的话,效率是高多了。
    我帖出来大家讨论一下吧。。现在这种方法有两个问题,
    一是多行注释的时候序列号也会被着色,
    二是引号中的=号和其它号不应该被着色
    <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'>&lt;?php<br>
            /*hello<br>
             */<br>
           &#036;string = implode&#40;&#34;&#092;n&#34;, &nbsp;&#036;array&#41;;//拆分<br>
           &#036;fp = fopen&#40;&#34;test.txt&#34;, &#34;w&#34;&#41;;<br>
           #写入<br>
            fwrite&#40;&#036;fp, &#036;string&#41;;<br>
            $abc = &quot;keysdf = sdf (sdf)<br>
            sdkfjsdf   klj l sdfj <br>
            abc
            &quot;; <br>
            ?&gt;
        </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>
      

  10.   

    to  keaizhong(可爱钟) 
    你这个怎么实现关键字加亮?
      

  11.   

    同样的原理可以实现关键字的加亮吧。
    和你那个一样,定义一个关键字的数组。
    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里的些东东我不是很了解,我也是参考别人的。
      

  12.   

    谢谢ice_berg16 (寻梦的稻草人) 
    up!
      

  13.   

    回复人: ice_berg16(寻梦的稻草人) ( ) 信誉:125  2005-06-30 18:59:00  得分: 0  
     
     
       你这个肯定不行,关键字也可能存在字符串或注释中,你这样会把所有的关键字都加亮了
      
     
    确实如此,所以要解决这个问题就可以了,在效率上会比较高一些。谁正则厉害一点的,可以试试看,我已经想尽了。
    或者用另外的折中办法来解决。
      

  14.   

    我是逐个字符读取的,只有遇到字符串或注释时才会查找结束标记,
    代码多时速度自然就下降了,
    不知道单用正则能否实现。估计困难。单用正则不能实现,但 正则+排队 可以很好的解决问题。
    你可以看一下fason(咖啡人生)的程序,虽然做了扰码处理,但解开还是很容易的
    记得前些时候我们和他在javascrip版面讨论过这个事情
      

  15.   

    还是存在一点问题
    输入
    <?php
    echo "<p> sadadas</p>";
    ?>
    <p> sadadas</p>显示
    <?php 
    echo "<p> sadadas</p>"; 
    ?> 
    <p> sadadas<p>
      

  16.   

    我觉得效果还是不错的,如果是我也是会采用逐个字符读取的判断的,不知道多次正则的效率如何了
    正则的效率并不是非常高的fason(咖啡人生)的程序不错,怎么不给个打包下载地址啊,还要自己看源代码判断注释
    可以先把 //
    和/*  */
    的注释 用特殊的符号替换标记下
     进行着色的时候 对有这些特殊符号的,不着色处理就可以了啊
    我个人的思路,不知道大家理解没有
      

  17.   

    bug报告
    /*aaaaaaa/*/*/
    变为
    /*aaaaaaa/*/*
    而且颜色不对建议还是用我建议的办法,先正则 标记所有的注释
      

  18.   

    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);} 上面是阿信那个地址解密的代码,用了很多正则的,可以参考下啊
      

  19.   

    /*aaaaaaa/*/*/
    变为
    /*aaaaaaa/*/*
    不是bug
    这个东西不是语法分析器,你必须给他合法的代码!<?php
    /*aaaaaaa/*/*/
    ?>
    Parse error: syntax error, unexpected '*' in ....