当前位置:首页 > PHP教程 > php函数 > 列表

php解析mht文件转换成html的实例

发布:smiling 来源: PHP粉丝网  添加日期:2018-08-08 17:48:35 浏览: 评论:0 

php解析mht文件,使用编辑器打开可以看到base64编码所以,mht是可以转换成html的。

  1. <?php 
  2.   
  3. /** 
  4.  * 针对Mht格式的文件进行解析 
  5. * 使用例子: 
  6. * 
  7. * function mhtmlParseBody($filename) { 
  8.   
  9.     if (file_exists ( $filename )) { 
  10.         if (is_dir ( $filename )) return false; 
  11.           
  12.         $filename = strtolower ( $filename ); 
  13.         if (strpos ( $filename, '.mht', 1 ) == FALSE) return false; 
  14.               
  15.           
  16.         $o_mhtml = new mhtml (); 
  17.         $o_mhtml->set_file ( $filename ); 
  18.         $o_mhtml->extract (); 
  19.         return $o_mhtml->get_part_to_file(0); 
  20.   
  21.     } 
  22.     return null; 
  23. } 
  24.   
  25. function mhtmlParseAll($filename) { 
  26.   
  27.     if (file_exists ( $filename )) { 
  28.         if (is_dir ( $filename )) return false; 
  29.   
  30.         $filename = strtolower ( $filename ); 
  31.         if (strpos ( $filename, '.mht', 1 ) == FALSE) return false; 
  32.               
  33.   
  34.         $o_mhtml = new mhtml (); 
  35.         $o_mhtml->set_file ( $filename ); 
  36.         $o_mhtml->extract (); 
  37.         return $o_mhtml->get_all_part_file(); 
  38.   
  39.     } 
  40.     return null; 
  41. } 
  42. */ 
  43.   
  44. classmhtparse { 
  45.   
  46.     var$file='' 
  47.     var$boundary='' 
  48.     var$filedata='' 
  49.     var$countparts= 1; 
  50.     var$log='' 
  51.       
  52.     functionextract() { 
  53.         $this->read_filedata (); 
  54.         $this->file_parts (); 
  55.   
  56.         return1; 
  57.     } 
  58.       
  59.     functionset_file($p) { 
  60.         $this->file =$p
  61.     } 
  62.       
  63.     functionget_log() { 
  64.         return$this->log; 
  65.     } 
  66.       
  67.     functionfile_parts() { 
  68.         $lines=<a href="/tags.php/explode/" target="_blank">explode</a>("\n",<a href="/tags.php/substr/" target="_blank">substr</a>($this->filedata, 0, 8192 ) ); 
  69.         <a href="/tags.php/foreach/" target="_blank">foreach</a>($linesas$line) { 
  70.             $line= trim ($line); 
  71.             if(strpos($line,'=') !== FALSE) { 
  72.                 if(strpos($line,'boundary', 0 ) !== FALSE) { 
  73.                     $range=$this->getrange ($line,'"','"', 0 ); 
  74.                     $this->boundary ="--".$range['range']; 
  75.                     $this->filedata =str_replace($line,'',$this->filedata ); 
  76.                     break
  77.                 } 
  78.             } 
  79.         } 
  80.         if($this->boundary !='') { 
  81.             $this->filedata =explode($this->boundary,$this->filedata ); 
  82.             unset ($this->filedata [0] ); 
  83.             $this->filedata =array_values($this->filedata ); 
  84.             $this->countparts =count($this->filedata ); 
  85.         }else
  86.             $tmp=$this->filedata; 
  87.             $this->filedata =array
  88.                     $tmp 
  89.             ); 
  90.         } 
  91.     } 
  92.       
  93.     functionget_all_part_file() { 
  94.         return$this->filedata; 
  95.     } 
  96.       
  97.     functionget_part_to_file($i) { 
  98.         $line_data_start= 0; 
  99.         $encoding='' 
  100.         $part_lines=explode("\n", ltrim ($this->filedata [$i] ) ); 
  101.         foreach($part_linesas$line_id=>$line) { 
  102.             $line= trim ($line); 
  103.             if($line=='') { 
  104.                 if(trim ($part_lines[0] ) =='--'
  105.                     return1; 
  106.                 $line_data_start=$line_id
  107.                 break
  108.             } 
  109.             if(strpos($line,':') !== FALSE) { 
  110.                 $pos=strpos($line,':'); 
  111.                 $k=strtolower( trim (substr($line, 0,$pos) ) ); 
  112.                 $v= trim (substr($line,$pos+ 1,strlen($line) ) ); 
  113.                 if($k=='content-transfer-encoding') { 
  114.                     $encoding=$v
  115.                 } 
  116.                 if($k=='content-location') { 
  117.                     $location=$v
  118.                 } 
  119.                 if($k=='content-type') { 
  120.                     $contenttype=$v
  121.                 } 
  122.             } 
  123.         } 
  124.           
  125.         foreach($part_linesas$line_id=>$line) { 
  126.             if($line_id<=$line_data_start
  127.                 $part_lines[$line_id] ='' 
  128.         } 
  129.           
  130.         $part_lines= implode ('',$part_lines); 
  131.         if($encoding=='base64'
  132.             $part_lines=base64_decode($part_lines); 
  133.         elseif($encoding=='quoted-printable'
  134.             $part_lines= imap_qprint ($part_lines); 
  135.           
  136.         return$part_lines
  137.     } 
  138.       
  139.     functionread_filedata() { 
  140.         $handle=<a href="/tags.php/fopen/" target="_blank">fopen</a>($this->file,'r'); 
  141.         $this->filedata =fread($handle,filesize($this->file ) ); 
  142.         fclose ($handle); 
  143.     } 
  144.       
  145.     functiongetrange(&$subject,$Beginmark_str='{',$Endmark_str='}',$Start_pos= 0) { 
  146.         /* 
  147.          *  $str="sssss { x { xx } {xx{xx } x} x} sssss";  $range=string::getRange($str,'{','}',0); echo $range['range']; //tulem: "  x { xx } {xx{xx } x} x" echo $range['behin']; //tulem: 6 echo  $range['end']; //tulem: 30 (' ') -- l5pumärgist järgnev out:  array('range'=>$Range,'begin'=>$Begin_firstOccurence_pos,'end'=>$End_sequel_pos)  | false v1.1 2004-2006,Uku-Kaarel  J5esaar,ukjoesaar@hot.ee,http://www.hot.ee/ukjoesaar,+3725110693 
  148.          */ 
  149.         if(emptyempty($Beginmark_str)) 
  150.             $Beginmark_str='{' 
  151.         $Beginmark_str_len=strlen($Beginmark_str); 
  152.           
  153.         if(emptyempty($Endmark_str)) 
  154.             $Endmark_str='}' 
  155.         $Endmark_str_len=strlen($Endmark_str); 
  156.           
  157.         /* $Start_pos_cache = 0; */ 
  158.         do
  159.             /* !algus */ 
  160.             if(!is_int($Begin_firstOccurence_pos)) 
  161.                 $Start_pos_cache=$Start_pos
  162.                   
  163.                 /* ?algus-test */ 
  164.             $Start_pos_cache= @strpos($subject,$Beginmark_str,$Start_pos_cache); 
  165.               
  166.             /* this is possible start for range */ 
  167.             if(is_int($Start_pos_cache)) { 
  168.                 /* skip */ 
  169.                 $Start_pos_cache= ($Start_pos_cache+$Beginmark_str_len); 
  170.                 /* test possible range start pos */ 
  171.                 if(is_int($Begin_firstOccurence_pos)) { 
  172.                     if($Start_pos_cache<$range_end_pos
  173.                         $rangeClean= 0; 
  174.                     elseif($Start_pos_cache>$range_end_pos
  175.                         $rangeClean= 1; 
  176.                 } 
  177.                 /* here it is */ 
  178.                 if(!is_int($Begin_firstOccurence_pos)) 
  179.                     $Begin_firstOccurence_pos=$Start_pos_cache
  180.             }/* VIGA NR 0 ALGUST EI OLE */ 
  181.               
  182.             if(!is_int($Start_pos_cache)) { 
  183.                 /* !algus */ 
  184.     /* VIGA NR 1 ALGUSMARKI EI LEITUD : VIIMANE VOIMALIK ALGUS */ 
  185.     if(is_int($Begin_firstOccurence_pos)and($Start_pos_cache<$range_end_pos)) 
  186.                     $rangeClean= 1; 
  187.                 else 
  188.                     returnfalse; 
  189.             } 
  190.             if(is_int($Begin_firstOccurence_pos)and($rangeClean!= 1)) { 
  191.                 if(!is_int($End_pos_cache)) 
  192.                     $End_sequel_pos=$Begin_firstOccurence_pos
  193.                   
  194.                 $End_pos_cache=strpos($subject,$Endmark_str,$End_sequel_pos); 
  195.                   
  196.                 /* ok */ 
  197.                 if(is_int($End_pos_cache)and($rangeClean!= 1)) { 
  198.                     $range_current_lenght= ($End_pos_cache-$Begin_firstOccurence_pos); 
  199.                     $End_sequel_pos= ($End_pos_cache+$Endmark_str_len); 
  200.                     $range_end_pos=$End_pos_cache
  201.                 } 
  202.                 /* VIGA NR 2 LOPPU EI LEITUD */ 
  203.                 if(!is_int($End_pos_cache)) 
  204.                     if($End_pos_cache== false) 
  205.                         returnfalse; 
  206.             } 
  207.         }while($rangeClean< 1 ); 
  208.           
  209.         if(is_int($Begin_firstOccurence_pos)andis_int($range_current_lenght)) 
  210.             $Range=substr($subject,$Begin_firstOccurence_pos,$range_current_lenght); 
  211.         else 
  212.             returnfalse; 
  213.           
  214.         returnarray( 
  215.                 'range'=>$Range
  216.                 'begin'=>$Begin_firstOccurence_pos
  217.                 'end'=>$End_sequel_pos 
  218.         ); 
  219.     }// end getrange() 
  220. }// class 
  221. ?> 

Tags: php解析mht php文件转换

分享到: