您现在的位置是:门户> 编程语言> PHP

PHP - Html Transfer Code
2020-03-11 46人围观 0条评论
简介PHP - Html Transfer Code

    PHP - Html Transfer Code 超文本转换码,市面上这东西已经很滥(多)了,不过是这几天自己实践了一下~~~~

    支持 多重嵌套 和 同标签嵌套,混合高亮显示(还有一点小问题)

    自我感觉便于修改和扩充~~~~~~~~~~~

    /**************************************************
    *                                                 *
    * Name    : Functions 4 Html Transfer Code (HTC)  *
    * Version : 1.3.2                                 *
    * Author  : Windy_sk                              *
    * Create  : 2003-09-03                            *
    * Modified: 2003-12-17                            *
    * Email   : windy_sk@126.com                      *
    * HomePage: None (Maybe Soon)                     *
    * Notice  : U Can Use & Modify it freely,         *
    *           BUT PLEASE HOLD THIS ITEM.            *
    *                                                 *
    **************************************************/

    $htc_list = array(
                    "B"                => "\\1",
                    "I"                => "\\1",
                    "U"                => "\\1",
                    "CENTER"        => "\\1\n",
                    "URL"                => "\\1",
                    "EMAIL"                => "\\1",
                    "IMAGE"                => "

    \n",
                    "DOWNLOAD"        => "exec:get_dl_html('\\1')",
                    "LIST"                => "exec:get_list_html('\\1')",
                    "QUOTE"                => "
      引用:
    \\1
    \n",
                    "IFRAME"        => "
    \n",
                    "MOVE"                => "\\1\n",
                    "GLOW"                => "
    \\1
    \n",
                    "SHADOW"        => "
    \\1
    \n",
                    "DROPSHADOW"        => "
    \\1
    \n",
                    "GBMUSIC"        => "\n",
                    "MUSIC"                => "

    Download The Music
    \n",               
                    "FLASH"                => "
    \n",
                    "SHOCKWAVE"        => "
    \n",
                    "QUICKTIME"        => "

    Download The Movie
    \n",
                    "REALPLAYER"        => "

    Download The Movie
    \n",
                    "MEDIAPLAYER"        => "

    Download The Movie
    \n",
                    "VOTE"                => "exec:get_vote_html('\\1')",
                    );

    $htc_list_att = array(
                    "ALIGN"                => "
    \\2
    \n",
                    "URL"                => "\\2",
                    "EMAIL"                => "\\2",
                    "IMAGE"                => "
    \\1

    \n",
                    "FONTFACE"        => "\\2",
                    "FONTSIZE"        => "\\2",
                    "FONTCOLOR"        => "\\2",
                    "DOWNLOAD"        => "exec:get_dl_html('\\1', '\\2')",
                    "LIST"                => "exec:get_list_html('\\2','\\1')",
                    "ATTACH"        => "exec:get_attach_html('\\2', '\\1')",
                    "VOTE"                => "exec:get_vote_html('\\1','\\2')",
                    );

    $htc_list_spl = array(
                    "PHP"                => "exec:get_highlight_html('\\1', 'php')",
                    "CSS"                => "exec:get_highlight_html('\\1', 'css')",
                    "HTML"                => "exec:get_highlight_html('\\1', 'html')",
                    "SCRIPT"        => "exec:get_highlight_html('\\1', 'script')",
                    "CODE"                => "exec:get_code_html('\\1')",
                    "EXECUTE"        => "\\1",
                    );


    function get_highlight_html($str, $type = "php") {
            $type = strtolower($type);
            $type_func = $type."_highlight";
            $type = strtoupper($type);
            $result = "";
            if(!function_exists($type_func)) $type_func = "php_highlight";
            $result .= "
           
           
           
    高亮显示 {$type} 代码:

              

              ".$type_func($str)."
              

            ".($type=="HTML"?"":"")."
           
           
           

            ";
            return $result;
    }


    function php_highlight($str) {
            $str = str_replace("\\\"","\"",$str);
            return highlight_string($str, true);
    }


    function css_highlight($str, $nl = true) {
            $color_1 = "red";
            $color_2 = "green";
            $color_3 = "blue";
            $str = str_replace("\\\"","\"",$str);
            $str = str_replace("\r", "", $str);
            preg_match_all("/[\\\*\.\w#: ]+\{[^\{\}]+\}/", $str, $arr_css);
            $arr_css = $arr_css[0];
            for($i=0; $i                $head = preg_replace("/([\\\*\.\w#: ]+\{)[^\{\}]+\}/", "\\1".($nl?"
    \n":""), $arr_css[$i]);
                    $unit = preg_replace("/[\\\*\.\w#: ]+\{([^\{\}]+)\}/", "\\1", $arr_css[$i]);
                    $unit_list = preg_split("/;\s*/", $unit);
                    $unit = "\n";
                    for($j=0; $j                        if(strlen($unit_list[$j])>0)
                                    $unit .= "    " . preg_replace("/\s*([\w\-]+)\s*:\s*(.*)/e", "'\\1 : '.htmlspecialchars('\\2').' ; '", $unit_list[$j]) . ($nl?"
    \n":"\n");
                    }
                    $arr_css[$i] = $head . $unit . "}";
            }
            return join(($nl?"\n

    \n":"\n\n"), $arr_css);
    }


    function script_highlight_note($str, $mode = true) {
            $color_note = "gray";
            $str = str_replace("\\\"","\"",$str);
            $str = preg_replace("/(.*)/isU", "\\1", $str);
            $str = $mode?"/*{$str}*/":"//{$str}";
            return "{$str}";
    }


    function script_highlight($str, $nl = true) {
            $color_1 = "red";
            $color_2 = "blue";
            $color_3 = "brown";
            $color_4 = "green";
            $str = str_replace("\\\"","\"",$str);
            $str = htmlspecialchars($str);
            $str = str_replace("=","&equal;",$str);
            $str = str_replace("|","&vertical;",$str);
            $keywords = array(
                            "{$color_1}"        => array("null", "true", "false", "NaN"),
                            "{$color_2}"        => array("var", "for", "if", "else", "switch", "case", "function", "loop", "continue", "break", "", "!&equal;", "&equal;&equal;", "&equal;", "&&", "&vertical;&vertical;"),
                            "{$color_3}"        => array("window", "self", "this", "event", "document", "opener", "Navigator", "Math", "Array", "String", "Object", "Function", "Number"),
                            );
            foreach($keywords as $key => $value) {
                    for($i=0; $i                        $str = preg_replace("/(\W)(".$value[$i].")(\W)/", "\\1\\2\\3", $str);
                    }
            }
            $str = preg_replace("/(\.|\s)([a-z]+)\(/i" ,"\\1\\2(", $str);
            $str = preg_replace("/\.(\w+)(?!\()/i" ,".\\1", $str);
            $str = preg_replace("/\/\/([^\n]*)\n/e" ,"script_highlight_note('\\1', false)", $str);
            $str = preg_replace("/\/\*(.*?)\*\//es" ,"script_highlight_note('\\1')", $str);       
            $str = str_replace("\t", "    ", $str);
            $str = str_replace("&equal;","=",$str);
            $str = str_replace("&vertical;","|",$str);
            return $nl?nl2br($str):$str;
    }


    function html_highlight_attr($att) {
            $color_1 = "red";
            $color_2 = "brown";
            $color_3 = "black";
            $att = str_replace("\\\"","\"",$att);
            $att = preg_replace("/=\s*('|\")([^'\"]+)\\1/eU","'=\\1'.preg_replace('/\s+/','|:s:|','\\2').'\\1'",$att);
            $att = str_replace("\\\"","\"",$att);
            $att .= " ";
            preg_match_all("/[a-z:\/\-]+(=(['\"]?).*[^\\\\]{1}\\2?)?\s+/iU", $att, $att_list);
            $att_list = $att_list[0];
            for($i=0; $i                if(empty($att_list[$i])) continue;
                    $att_list[$i] = trim($att_list[$i]);
                    $att_list[$i] = preg_replace("/([^=]+)([=]?)(['\"]?)(.*)(\\3)/", "\\1\\2\\3\\4\\3", $att_list[$i]);
            }
            return str_replace("|:s:|", " ", join(" ", $att_list));
    }


    function html_highlight($str) {
            $color_1 = "red";
            $color_2 = "blue";
            $color_3 = "gray";
            $str = str_replace("\\\"","\"",$str);
            preg_match_all("/]*)>(.*)/isU", $str, $arr_tmp);
            $arr_script = $arr_tmp[0];
            for($i=0; $i                $str = str_replace($arr_script[$i], "
    ::script_{$i}::
    ", $str);
                    $arr_script[$i] = preg_replace("/]*)>(.*)/iseU", "'
    '.script_highlight(str_replace('\\\"','\"','\\2'), false).''", $arr_script[$i]);
            }
            $str = preg_replace("/(]*>)(.*)()/ieU" ,"'\\1'.htmlspecialchars('\\2').'\\3'", $str);
            $str = preg_replace("//seU" ,"''", $str);
            $str = preg_replace("/]*)>(.*)/isU" ,"\\2", $str);
            $str = preg_replace("//ise" ,"''", $str);
            $str = preg_replace("//i" ,"", $str);
            $str = preg_replace("//sU" ,"", $str);
            $str = preg_replace("/]*)>(.*)/iseU" ,"'
    '.css_highlight(str_replace('\\\"','\"','\\2'), false).'
    '", $str);
            for($i=0; $i                $str = str_replace("
    ::script_{$i}::
    ", $arr_script[$i], $str);
            }
            $str = str_replace("", "
    ", $str);
            $str = str_replace("", "", $str);
            $str = str_replace(" >", ">", $str);
            $str = str_replace("  ","  ",$str);
            $str = str_replace("\t","    ",$str);
            return nl2br($str);
    }


    function get_file_pic($filename) {
            global $root_path;
            $ext = str_replace(".","",strrchr($filename,"."));
            $pic = $root_path."images/mime_type/{$ext}.gif";
            return file_exists($pic)?"$pic":$root_path."images/mime_type/attch.gif";
    }


    function get_dl_html($filename, $str = "") {
            return " ".(empty($str)?basename($filename):$str)."";
    }


    function get_attach_html($filename, $id) {
            return " $filename";
    }


    function get_vote_html($vote_idx, $message = ""){
            global $db_host, $db_user, $db_pass, $db_name;
            $db = new DB_Manager($db_host, $db_user, $db_pass);
            $db->Connect();
            $db->SelectDB($db_name);
            $db->Query("select * from mnms_poll where id=".$vote_idx);
            $record = $db->GetRS();
            $str = "";
            $db->close();
            unset($db);
            if($record) {
                    $username = "dummy";
                    $if_vote = !(strpos($record[vote_user], "|{$username}|")===false)
    strpos($record[vote_user], "|".GetIp()."|");
                    $str .= "
                           
                              ".(empty($message)?$record[vote_title]:$message)."
                              
                              ";
                    $vote_list = split("::",$record[vote_list]);
                    $vote_count = split("::",$record[vote_count]);
                    $vote_users = count(split("\n", $record[vote_user])) - 1;
                    $vote_sum = array_sum($vote_count);
                    $str .= "
                                ";
                    if($vote_sum==0) $vote_sum = 1;
                    for($i=0; $i                        $str .= "
                                
    \n";
                    }
                    $str .= "";
                    $str .= "
                              
    目前共有 {$vote_users} 人参与了本投票
    ".($if_vote?"► ":"").htmlspecialchars($vote_list[$i])." 占总票数的 ".ceil((int)$vote_count[$i]*100/$vote_sum)."%

    ".($if_vote?"您已经投过票了!":"   ")."

                              
                            ";
            }
            return $str;
    }


    function get_code_html($str) {
            $str = str_replace("\\\"","\"",$str);
            return "
           
              
           
    ".htmlspecialchars($str)."

                
                
                
                (提示:可以先修改部分代码)
              
    ";
    }


    function get_list_html($content, $type = "") {
            $content = preg_replace("/(
    )?[\r\n]+/", "\n", $content);
            $content = preg_replace("/[\r\n]+/", "\n", $content);
            $content = preg_replace("/^[\n]*(.*)[\n]*$/m", "\\1", $content);
            $content = str_replace("\n", "
  • ", $content);
            $content = "
    • $content
    \n";
            return $content;
    }


    function html_trans($str) {
            $search  = array("&",                "'",                "\"",                "",        "  ",                "\t");
            $replace = array("&",        "'",        """,        "",        "  ",        "    ");
            return nl2br(str_replace($search, $replace, $str));
    }


    function link_url($str) {
            $str = preg_replace("/((http|ftp|mms|rtsp|pnm|mailto):\/\/[\w@:\.\/\?=&;#\-%]+)/i", "\\1", $str);
            $str = preg_replace("/(\w+@(\w+\.)+[\w]{2,3})/i", "\\1", $str);
            $str = preg_replace("/(href|src)='[^<]+'/iU", "\\1=\\2", $str);
            return $str;
    }


    function htc2html_loop($str) {
            global $htc_list, $htc_list_att;
            foreach($htc_list as $key => $value) {
                    if(substr($value,0,5)=="exec:"){
                            $str = preg_replace("/\[$key\]((.(?!\[$key(\s?=\s?([^\]]+))?\]))*)\[\/$key\]/iexsU", substr($value,5), $str);
                    } else {
                            $str = preg_replace("/\[$key\]((.(?!\[$key(\s?=\s?([^\]]+))?\]))*?)\[\/$key\]/ixsU", "$value", $str);
                    }
            }
            foreach($htc_list_att as $key => $value) {
                    if(substr($value,0,5)=="exec:"){
                            $str = preg_replace("/\[$key\s?=\s?([^\]]+)\]((.(?!\[$key(\s?=\s?([^\]]+))?\]))*)\[\/$key\]/iesxU", substr($value,5), $str);
                    } else {
                            $str = preg_replace("/\[$key\s?=\s?([^\]]+)\]((.(?!\[$key(\s?=\s?([^\]]+))?\]))*)\[\/$key\]/isxU", "$value", $str);
                    }
            }
            return $str;
    }


    function htc2html($str, $trans_url = true , $loop = 3) {
            global $htc_list_spl;
            $str = preg_replace("/(\[\w+\])\s*/ixs","\\1",$str);
            $str = preg_replace("/\s*(\[\/\w+\])/ixs","\\1",$str);
            foreach($htc_list_spl as $key => $value) {
                    preg_match_all("/\[$key\](.*)\[\/$key\]/ixsU", $str, $arr_tmp);
                    $arr_spl[$key] = $arr_tmp[0];
                    for($i=0; $i                        $str = str_replace($arr_spl[$key][$i], "
    ::{$key}_{$i}::
    ", $str);
                            if(substr($value,0,5)=="exec:"){
                                    $arr_spl[$key][$i] = preg_replace("/\[$key\](.*)\[\/$key\]/iexsU", substr($value,5), $arr_spl[$key][$i]);
                            } else {
                                    $arr_spl[$key][$i] = preg_replace("/\[$key\](.*)\[\/$key\]/ixsU", "$value", $arr_spl[$key][$i]);
                            }
                    }
            }
            $str = html_trans($str);
            while($loop-- > 0) {
                    if(!preg_match("/\[(\w+)(\s?=\s?([^\]]+))?\](.*)\[\/\\1\]/isU", $str)) break;
                    $str = htc2html_loop($str);
            }
            if($trans_url) $str = link_url($str);
            foreach($htc_list_spl as $key => $value) {
                    for($i=0; $i                        $str = str_replace("
    ::{$key}_{$i}::
    ", $arr_spl[$key][$i], $str);
                    }
            }
            return $str;
    }
    ?>



    使用方法:

    echo htc2html($str);

    OK 了~~~~~~~~
分享:

文章评论