您好,欢迎访问一九零五行业门户网

ANSI颜色码转HTML

此方法是一字一字往下抓ansi颜色码转换,有点土法炼钢。当前和大部分telnet软件
比较不同是他们换行就有自动作退出码,而我这个并没有作。
echo 
;
echo ansi_2_html(fread(fopen(1.txt,r),filesize(1.txt)));
echo ;
## ansi 转换成 html
function ansi_2_html($string){
$ansi_light=array(0=>000000,1=>#ff0000,2=>#00cc00,3=>#ffff00,4=>#3366ff,5=>#cc33cc,6=>#66ffff,7=>#ffffff);
   $ansi_dark =array(0=>000000,1=>#840000,2=>#008200,3=>#ad4100,4=>#000084,5=>#840084,6=>#00b6b5,7=>#c6c7c6);
## 颜色样本同cnews
$flag_have_ansi= 0;
   $dl            = 0;         
   $flag_hava_bg  = 0;
$string=str_replace(chr(27).'[m',chr(27).'[0m',$string);
for($i=0;$istrlen($string);$i++):
      if($string[$i]==chr(27)):
         $laststring=substr($string,$i,strlen($string)-$i);         
         if(ereg(chr(27).\[([0-8;]{0,}[^m])m,$laststring)):
            $ansicode=substr($laststring,2,strpos($laststring,'m')-2);
            $i=$i+strpos($laststring,'m');
            $rendition=split(;,$ansicode);
            if(is_array($rendition)) sort($rendition);
            for($j=0;$jcount($rendition)-1;$j++):
               $rendition[$j]=(int)$rendition[$j];
               if($rendition[$j]=='1') $dl=1;
               if($rendition[$j]=='0') $dl=0;
$ansi=($dl=='0') ? $ansi_dark : $ansi_light;
if($rendition[$j]10):
                  if($rendition[$j]==0) :
                     $style=background-color:#000000;text-decoration:none;;
                     $tempbg=;
                  endif;
                  if($rendition[$j]==1) 
                     $style=color:#ffffff;;
                  if($rendition[$j]==4) 
                     $style=$style.text-decoration:underline;;            
                  # 5 blink on
                  # 7 reverse video on
                  # 8 nondisplayed (invisible) 缺 不知道如何实作显示,但大部分后三者用不到
               endif;               
               if($rendition[$j]>=30&&$rendition[$j]37):
                  $style=$style.color:.$ansi[$rendition[$j]%10].;;
                  $style=$style.$tempbg;
               endif;
               if($rendition[$j]>=40):               
                  $flag_hava_bg = 1;
                  $style=$style.background-color:.$ansi_dark[$rendition[$j]%10].;;                  
                  $tempbg=background-color:.$ansi_dark[$rendition[$j]%10].;;
               endif;
            endfor;
if($flag_have_ansi==1):
               $font=;
            elseif($flag_have_ansi==0):
               $flag_hava_bg = 0;
               $tempbg       =;
               $font=;
            endif;
            $flag_have_ansi=1;
            $myansi.=$font;   
         endif;
      else:
         $myansi.=$string[$i];
      endif;
   endfor;
   return .$myansi;   
}
下图为telnet软件浏览
下图为浏览器浏览
其它类似信息

推荐信息