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

PHP
php ignore_user_abort与register_shutdown_function 使用方法
PHP写MySQL数据 实现代码
phpmyadmin 访问被拒绝的真实原因
PHP 程序员也要学会使用“异常”
php MYSQL 数据备份类
PHP 类型转换函数intval
php 图像函数大举例(非原创)
PHP 输出缓存详解
PHP COOKIE设置为浏览器进程
ie6 动态缩略图不显示的原因
php 将bmp图片转为jpg等其他任意格式的图片
discuz7 phpMysql操作类
一个php Mysql类 可以参考学习熟悉下
php 分页函数multi() discuz
学习discuz php 引入文件的方法DISCUZ_ROOT
php fckeditor 调用的函数
mysql 性能的检查和优化方法
PHP 高级课程笔记 面向对象
PHP 多进程 解决难题
php 404错误页面实现代码

PHP - Html Transfer Code


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-12   浏览: 144 ::
收藏到网摘: 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 了~~~~~~~~