PHP - Html Transfer Code
Hypertext conversion code, there is already a lot of it on the market, but I have been practicing it myself in the past few days~~~~ Supports multiple nesting and same-label nesting, mixed highlighting (There is still a little problem) I feel that it is easy to modify and expand~~~~~~~~~~~ /************************************************** * * * 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" "B" => "\1 ", "I" "I" => "\1< ;/i>", "U" "U" => "\1 ", "CENTER" => "
\ 1 n" "URL" "URL" lt;a href='mailto:\1 '>\1",
"IMAGE" "IMAGE" => "
n",
"DOWNLOAD" => "exec:get_dl_html('\1')",
"LIST" => "exec:get_list_html(' \1')" ,
"quote" = & gt; "" & lt; center & gt; & lt; table border = '0' width = '90%' cellspacing = '0' cellpadding = '0' & gt; tr & gt; & lt; td & gt; quote : n", "IFRAME" => "n", "MOVE" => "\1 n", "GLOW" => "n", "SHADOW" => "n", "DROPSHADOW" => "n", "GBMUSIC" => "n", "MUSIC" => "n", "FLASH" => "n", "SHOCKWAVE" => "n", "QUICKTIME" => "n", "REALPLAYER" => "\n", "MEDIAPLAYER" => "\n", "VOTE" => "exec:get_vote_html('\\1')", ); $htc_list_att = array( "ALIGN" => "\\2
n", "URL" => "\2 ", "EMAIL" => "\2 ", "IMAGE" => " 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 = " "; 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":"nn"), $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 font>\2 font>\3\4 font>\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("/<([a-z:]+)s*(.*?)( /|/)?>/ise" ,"'<\1 '.html_highlight_attr('\2').'\3> font>'", $str); $str = preg_replace("/<(/[a-z:]+)>/i" ,"<\1> ", $str); $str = preg_replace("/<(!--.*--)>/sU" ,"<\1> ", $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(" font>", " ", $str); $str = str_replace(" b>", "", $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)." "; } return $str; } function get_code_html($str) { $str = str_replace("\"",""",$str); return " "; } function get_list_html($content, $type = "") { $content = preg_replace("/( )?[rn]+/", "n", $content); $content = preg_replace("/[rn]+/", "n", $content); $content = preg_replace("/^[n]*(.*)[n]*$/m", "\1", $content); $content = str_replace("n", "", $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("/[$keys?=s?([^]]+)]((.(?![$key(s?=s?([^]]+))?]))*)[/$key]/iesxU", substr($value,5), $str); } else { $str = preg_replace("/[$keys?=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 了~~~~~~~~
http://www.bkjia.com/PHPjc/314366.html www.bkjia.com true http://www.bkjia.com/PHPjc/314366.html TechArticle PHP - Html Transfer Code超文本转换码,市面上这东西已经很滥(多)了,不过是这几天自己实践了一下~~~~ 支持 多重嵌套 和 同标签嵌套,混合...