当前位置: 首页 > 图文教程 > 网络编程 > PHP > PHP - Html Transfer Code

PHP
php 远程图片保存到本地的函数类
php 破解防盗链图片函数
快速开发一个PHP扩展图文教程
PHP6 mysql连接方式说明
php 进度条实现代码
php discuz 主题表和回帖表的设计
php 无限级缓存的类的扩展
php adodb操作mysql数据库
php FPDF类库应用实现代码
sourcesafe管理phpproj文件的补充说明(downmoon)
AspNetAjaxPager,Asp.Net通用无刷新Ajax分页控件,支持多样式多数据绑定
php一句话cmdshell新型 (非一句话木马)
php 木马的分析(加密破解)
PHP 数组入门教程小结
php 方便水印和缩略图的图形类
PHP加速 eAccelerator配置和使用指南
PHP 组件化编程技巧
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
两个强悍的php 图像处理类1
PHP 数据库 常见问题小结

PHP - Html Transfer Code


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-12   浏览: 85 ::
收藏到网摘: n/a


PHP - Html Transfer Code 超文本转换码,市面上这东西已经很滥(多)了,不过是这几天自己实践了一下~~~~
支持 多重嵌套 和 同标签嵌套,混合高亮显示(还有一点小问题)
自我感觉便于修改和扩充~~~~~~~~~~~
<?php
/**************************************************
* *
* Name : Functions 4 Html Transfer Code (HTC) *
* Version : 1.3.2 *
* Author : Windy_sk *
* Create : 2003-09-03 *
* Modified: 2003-12-17 *
* Email : [email protected] *
* HomePage: None (Maybe Soon) *
* Notice : U Can Use & Modify it freely, *
* BUT PLEASE HOLD THIS ITEM. *
* *
**************************************************/
$htc_list = array(
"B" => "<b>\\1</b>",
"I" => "<i>\\1</i>",
"U" => "<u>\\1</u>",
"CENTER" => "<center>\\1</center>\n",
"URL" => "<a href='\\1'>\\1</a>",
"EMAIL" => "<a href='mailto:\\1'>\\1</a>",
"IMAGE" => "<br /><table align=center width='100%'><tr><td align='center'><img src='\\1' border='0' onload='org_w=this.offsetWidth;this.style.width=10;this.style.width=(org_w>parseInt(this.offsetParent.offsetWidth))?this.offsetParent.offsetWidth:org_w' onclick='window.open(this.src)' style='cursor:pointer' /></td></tr></table><br />\n",
"DOWNLOAD" => "exec:get_dl_html('\\1')",
"LIST" => "exec:get_list_html('\\1')",
"QUOTE" => "<center><table border='0' width='90%' cellspacing='0' cellpadding='0'><tr><td> 引用:</td></tr><tr><td><table width='100%' class='quote'><tr><td>\\1</td></tr></table></td></tr></table></center>\n",
"IFRAME" => "<table align=center><tr><td><iframe src='\\1' frameborder='0' allowtransparency='true' scrolling='yes' width='400' height='300'></iframe></td></tr></table>\n",
"MOVE" => "<center><marquee width='90%' behavior='alternate' scrollamount='3'>\\1</marquee><center>\n",
"GLOW" => "<table><tr><td class='glow'>\\1</td></tr></table>\n",
"SHADOW" => "<table><tr><td class='shadow'>\\1</td></tr></table>\n",
"DROPSHADOW" => "<table><tr><td class='dropshadow'>\\1</td></tr></table>\n",
"GBMUSIC" => "<bgsound src='\\1' loop='-1'>\n",
"MUSIC" => "<TABLE cellSpacing=0 cellPadding=0 align=center border=0><TBODY><TR><TD vAlign=top colSpan=3><EMBED name=music_rm align=top src='\\1' width='200' height='30' type='audio/x-pn-realaudio-plugin' console='ClipNN' loop='false' autostart='false' controls='ControlPanel' border='1' vspace='0' hspace='0'></EMBED><br><STRONG><A href='\\1'>Download The Music</A></STRONG></TD></TR></TBODY></TABLE>\n",
"FLASH" => "<table align=center><tr><td><object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0' width='400'><param name='movie' value='\\1'><param name='quality' value='high'><embed src='\\1' quality='high' pluginspage='http://www.macromedia.com/go/getflashplayer' type='application/x-shockwave-flash' width='32' height='32'></embed></object></td></tr></table>\n",
"SHOCKWAVE" => "<table align=center><tr><td><object classid='clsid:166B1BCA-3F9C-11CF-8075-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,0,0' width='400'><param name='src' value='\\1'><embed src='\\1' pluginspage='http://www.macromedia.com/shockwave/download/' width='400'></embed></object></td></tr></table>\n",
"QUICKTIME" => "<table align=center><tr><td><embed src='\\1' width='400' height='300' autoplay='true' loop='false' controller='true' playeveryframe='false' cache='false' scale='TOFIT' bgcolor='#000000' kioskmode='false' targetcache='false' pluginspage='http://www.apple.com/quicktime/'><br><STRONG><A href='\\1'>Download The Movie</A></STRONG></td></tr></table>\n",
"REALPLAYER" => "<TABLE cellSpacing=0 cellPadding=0 align=center border=0><TBODY><TR><TD vAlign=top colSpan=3><EMBED name=movie_rm align=top src='\\1' width='400' height='300' type='audio/x-pn-realaudio-plugin' console='ClipNN' loop='true' autostart='true' controls='ImageWindow,ControlPanel' border='1' vspace='0' hspace='0'></EMBED><br><STRONG><A href='\\1'>Download The Movie</A></STRONG></TD></TR></TBODY></TABLE>\n",
"MEDIAPLAYER" => "<table align=center><tr><td><object classid='clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95' width='400'><param name='ShowStatusBar' value='-1'><param name='Filename' value='\\1'><embed type='application/x-oleobject' codebase='http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701' flename='mp' src='\\1' width='400'></embed></object><br /><STRONG><A href='\\1'>Download The Movie</A></STRONG></td></tr></table>\n",
"VOTE" => "exec:get_vote_html('\\1')",
);
$htc_list_att = array(
"ALIGN" => "<div align='\\1'>\\2</div>\n",
"URL" => "<a href='\\1'>\\2</a>",
"EMAIL" => "<a href='mailto:\\1'>\\2</a>",
"IMAGE" => "<br /><table align=center width='100%'><tr><td><img alt='\\1' src='\\2' border='0' onload='org_w=this.offsetWidth;this.style.width=10;this.style.width=(org_w>parseInt(this.offsetParent.offsetWidth))?this.offsetParent.offsetWidth:org_w;' onclick='window.open(this.src)' style='cursor:pointer' /></td></tr></table><br />\n",
"FONTFACE" => "<span style='FONT-FAMILY:\\1'>\\2</span>",
"FONTSIZE" => "<span style='font-size:\\1'>\\2</span>",
"FONTCOLOR" => "<span style='color:\\1'>\\2</span>",
"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 = "<center><table border='0' width='90%' cellspacing='0' cellpadding='0'>";
if(!function_exists($type_func)) $type_func = "php_highlight";
$result .= "
<tr><td>高亮显示 <font color='red'>{$type}</font> 代码:</td></tr>
<tr><td>
<table width='100%' class='quote'><tr><td>
".$type_func($str)."
</td></tr></table>
".($type=="HTML"?"<input type='button' value='运行代码' onclick=\"str=this.parentNode.firstChild.innerText;if(str==undefined){alert('Execute Codez Failed !');return;}code_win=window.open('about:blank');doc=code_win.document;doc.open();doc.write(str);doc.close();code_win.focus();\" />":"")."
<input type='button' value='复制代码' onclick=\"try{window.clipboardData.setData('text',this.parentNode.firstChild.innerText);alert('Save Codez To The Clipboard !');}catch(e){alert('Codez Copy Failed !');}\">
<input type='button' value='保存代码' onClick=\"try{str=this.parentNode.firstChild.innerText;code_win=window.open('about:blank','_blank','top=10000');code_win.document.writeln(str);code_win.document.execCommand('saveas','','code.html');code_win.close();}catch(e){alert('Codez Save Failed !');}\">
</td></tr>
</table></center>
";
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<count($arr_css); $i++) {
$head = preg_replace("/([\\\*\.\w#: ]+\{)[^\{\}]+\}/", "<font color='{$color_1}'>\\1</font>".($nl?"<br />\n":""), $arr_css[$i]);
$unit = preg_replace("/[\\\*\.\w#: ]+\{([^\{\}]+)\}/", "\\1", $arr_css[$i]);
$unit_list = preg_split("/;\s*/", $unit);
$unit = "\n";
for($j=0; $j<count($unit_list); $j++) {
if(strlen($unit_list[$j])>0)
$unit .= " " . preg_replace("/\s*([\w\-]+)\s*:\s*(.*)/e", "'<font color=\'{$color_2}\'>\\1</font> : <font color=\'{$color_3}\'>'.htmlspecialchars('\\2').'</font> ; '", $unit_list[$j]) . ($nl?"<br />\n":"\n");
}
$arr_css[$i] = $head . $unit . "<font color='{$color_1}'>}</font>";
}
return join(($nl?"\n<br /><br />\n":"\n\n"), $arr_css);
}

function script_highlight_note($str, $mode = true) {
$color_note = "gray";
$str = str_replace("\\\"","\"",$str);
$str = preg_replace("/<font color='[a-z]+'>(.*)<\/font>/isU", "\\1", $str);
$str = $mode?"/*{$str}*/":"//{$str}";
return "<font color='{$color_note}'>{$str}</font>";
}

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<count($value); $i++) {
$str = preg_replace("/(\W)(".$value[$i].")(\W)/", "\\1<font color='{$key}'>\\2</font>\\3", $str);
}
}
$str = preg_replace("/(\.|\s)([a-z]+)\(/i" ,"\\1<font color='{$color_4}'>\\2</font>(", $str);
$str = preg_replace("/\.(\w+)(?!\()/i" ,".<font color='{$color_3}'>\\1</font>", $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<count($att_list); $i++) {
if(empty($att_list[$i])) continue;
$att_list[$i] = trim($att_list[$i]);
$att_list[$i] = preg_replace("/([^=]+)([=]?)(['\"]?)(.*)(\\3)/", "<font color='{$color_2}'>\\1</ font><font color='{$color_1}'>\\2</ font>\\3<font color='{$color_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("/<script([^>]*)>(.*)<\/script>/isU", $str, $arr_tmp);
$arr_script = $arr_tmp[0];
for($i=0; $i<count($arr_script); $i++) {
$str = str_replace($arr_script[$i], "
::script_{$i}::
", $str);
$arr_script[$i] = preg_replace("/<script([^>]*)>(.*)<\/script>/iseU", "'<font color=\'{$color_2}\'><SCRIPT '.html_highlight_attr('\\1').'></font><br />'.script_highlight(str_replace('\\\"','\"','\\2'), false).'<font color=\'{$color_2}\'></SCRIPT></font>'", $arr_script[$i]);
}
$str = preg_replace("/(<textarea[^>]*>)(.*)(<\/textarea>)/ieU" ,"'\\1'.htmlspecialchars('\\2').'\\3'", $str);
$str = preg_replace("/<!\-\-(.*)\-\->/seU" ,"'<!--'.htmlspecialchars('\\1').'-->'", $str);
$str = preg_replace("/<style([^>]*)>(.*)<\/style>/isU" ,"<!style\\1>\\2</style!>", $str);
$str = preg_replace("/<([a-z:]+)\s*(.*?)( \/|\/)?>/ise" ,"'<font color=\'{$color_2}\'><\\1 '.html_highlight_attr('\\2').'\\3></ font>'", $str);
$str = preg_replace("/<(\/[a-z:]+)>/i" ,"<font color='{$color_2}'><\\1></font>", $str);
$str = preg_replace("/<(!\-\-.*\-\-)>/sU" ,"<font color='{$color_3}'><\\1></font>", $str);
$str = preg_replace("/<!style([^>]*)>(.*)<\/style!>/iseU" ,"'<font color=\'{$color_2}\'><STYLE '.html_highlight_attr('\\1').'></font><br />'.css_highlight(str_replace('\\\"','\"','\\2'), false).'<br /><font color=\'{$color_2}\'></STYLE></font>'", $str);
for($i=0; $i<count($arr_script); $i++) {
$str = str_replace("
::script_{$i}::
", $arr_script[$i], $str);
}
$str = str_replace("</ font>", "</font>", $str);
$str = str_replace("</ b>", "</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."/upload/tech/20091012/20091012013122_621bf66ddb7c962aa0d22ac97d69b793.gif";
return file_exists($pic)?"$pic":$root_path."/upload/tech/20091012/20091012013122_1905aedab9bf2477edc068a355bba31a.gif";
}

function get_dl_html($filename, $str = "") {
return "<img src='".get_file_pic($filename)."' border='0'> <a href='$filename'>".(empty($str)?basename($filename):$str)."</a>";
}

function get_attach_html($filename, $id) {
return "<img src='".get_file_pic($filename)."' border='0'> <a href='attach_manage.php?method=download&id=$id'>$filename</a>";
}

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 .= "
<fieldset>
<legend align='left' color=black>".(empty($message)?$record[vote_title]:$message)."</legend>
<form name='poll' action='poll_manage.php?method=vote' method='post'>
<table width='90%' align='center'>";
$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 .= "
<tr><td colspan='2'> 目前共有 <font color='red'>{$vote_users}</font> 人参与了本投票 </td></tr>";
if($vote_sum==0) $vote_sum = 1;
for($i=0; $i<count($vote_list); $i++) {
$str .= "
<tr><td>".($if_vote?"► ":"<input type='hidden' value='".$vote_count[$i]."' name='vote_count[]'><input type='".($record[vote_multi]=='Y'?"checkbox":"radio")."' name='vote[]' value='{$i}'>").htmlspecialchars($vote_list[$i])."</td><td width='400'><img src='images/bars/bar".($i+1).".gif' width='".ceil($vote_count[$i]*300/$vote_sum)."' height='10'> 占总票数的 <font color='#990000'>".ceil((int)$vote_count[$i]*100/$vote_sum)."%</font></td></tr>\n";
}
$str .= "<tr><td colspan='2' align='center'><br>".($if_vote?"<b>您已经投过票了!</b>":"<input type='hidden' value='{$record[id]}' name='id'><input type='Submit' value=' 确 定 ' name='Submit'> <input type='reset' value=' 重 置 ' name='reset'>")."</td></tr>";
$str .= "
</table>
</form>
</fieldset>";
}
return $str;
}

function get_code_html($str) {
$str = str_replace("\\\"","\"",$str);
return "
<table align='center' width='550'>
<tr><td><textarea cols='80' rows='10' name=Code>".htmlspecialchars($str)."</textarea><br>
<input type='button' value='运行代码' onClick=\"str=this.parentNode.firstChild.value;code_win=window.open('about:blank');doc=code_win.document;doc.open();doc.write(str);doc.close();code_win.focus();\">
<input type='button' value='复制代码' onclick=\"try{window.clipboardData.setData('text',this.parentNode.firstChild.value);alert('Save Codez To The Clipboard !');}catch(e){alert('Please Copy The Selected Codez !');this.parentNode.firstChild.select();}\">
<input type='button' value='保存代码' onClick=\"str=this.parentNode.firstChild.value;code_win=window.open('about:blank','_blank','top=10000');code_win.document.writeln(str);code_win.document.execCommand('saveas','','code.html');code_win.close();\">
(提示:可以先修改部分代码)
</td></tr>
</table>";
}

function get_list_html($content, $type = "") {
$content = preg_replace("/(<br \/>)?[\r\n]+/", "\n", $content);
$content = preg_replace("/[\r\n]+/", "\n", $content);
$content = preg_replace("/^[\n]*(.*)[\n]*$/m", "\\1", $content);
$content = str_replace("\n", "</li><li>", $content);
$content = "<ul type='$type'><li>$content</li></ul>\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", "<a href='\\1' target='_blank'>\\1</a>", $str);
$str = preg_replace("/(\w+@(\w+\.)+[\w]{2,3})/i", "<a href='mailto:\\1'>\\1</a>", $str);
$str = preg_replace("/(href|src)='<a href=('.+')>[^<]+<\/a>'/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<count($arr_spl[$key]); $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<count($arr_spl[$key]); $i++) {
$str = str_replace("
::{$key}_{$i}::
", $arr_spl[$key][$i], $str);
}
}
return $str;
}
?>

使用方法:
echo htc2html($str);
OK 了~~~~~~~~