Feeds:
文章
留言

Archive for 十月 17th, 2005

今天早上開會的時候聽到可以利用標頭檔來使IE自動啟用Client端的應用程式,因為目前office 支援開啟HTML文件,所以,可以透過標頭檔的方式來觸發client端用相對應的應用程式開啟文件,其中標頭檔的重點在於 ContentType 的設定,也就是設定傳送的文件內容格式,下面是三種常用的office 文件的 content type

內容類型

副檔名

Office軟體

application/msword

.doc

Microsoft Word

application/vnd.ms-excel

.xls

Microsoft Excel

application/vnd.ms-powerpoint

.ppt

Microsoft PowerPoint

 

下面是 PHP 的實作範例,(修改自 http://tlcheng.no-ip.com/Paper/RunPC/132/Office.htm  ASP.Net 範例,對ASP.NEt有興趣的可以參考此篇文章):


<?php
 $content = <<< BOF
 <table cellspacing="1" cellpadding="1" width="100%" border="1">        
  <tr>
   <th>欄0</th>
   <th>欄1</th>
   <th>欄2</th>
  </tr>        
  <tr>
   <th>列1</th>
   <td style="color: yellow; background-color: green">1,1</td>
   <td>1,2</td>
  </tr>        
  <tr> 
   <th>列2</th>
   <td>2,1</td>           
   <td style="font-size: 32px; font-style: italic; font-family: ‘bauhaus 93’">2,2</td>
  </tr>     
 </table>  
BOF;

 if (isset($_GET[‘contenttype’]) && isset($_GET[‘ext’])) { 
  $filename = ‘office.’.$_GET[‘ext’];   
  header("Content-type: {$_GET[‘contenttype’]}n");
  header("Content-Disposition: filename={$filename}n"); 
  echo $content;  
  exit();
 }
?>
<html>
 <head>
 <title>測試</title>     
 <meta http-equiv="content-type" content="text/html; charset=big5">     
 <meta name="vs_targetschema" content="http://schemas.microsoft.com/intellisense/ie5">  
 </head>  
 
 <body bottommargin="0" leftmargin="0" topmargin="0" rightmargin="0">     
 <?php
  echo $content;
 ?>
 <p>輸出格式         
 <a href="<?php echo $PHP_SELF;?>?ext=doc&contenttype=application/msword" target = ‘office’>word</a>         
 <a href="<?php echo $PHP_SELF;?>?ext=xls&contenttype=application/vnd.ms-excel" target = ‘office’>excel</a>         
 <a href="<?php echo $PHP_SELF;?>?ext=ppt&contenttype=application/vnd.ms-powerpoint" target = ‘office’>powerpoint</a>     
 </p>  
</body></html>


上述參考網頁中還有描述到一個相當好用的技巧:"樣板",如果PHP要實作該功能也相當的容易,假如我的樣本檔案doc_pattern.htm 的內文為

作者:(key:author)
開發環境:(key:enviroment)

 

php 程式碼如下:

<?php 
 if (isset($_GET[‘contenttype’]) && isset($_GET[‘ext’])) { 
  $filename = ‘doc_pattern.htm’;
  $searchs = array(‘(key:author)’, ‘(key:enviroment)’);
  $replaces = array(‘chui-wen chiu’, ‘linux+php’);
  $content = str_replace($searchs, $replaces , file_get_contents($filename));

  $filename = ‘office.’.$_GET[‘ext’];   
  header("Content-type: {$_GET[‘contenttype’]}n");
  header("Content-Disposition: filename={$filename}n"); 
  echo $content;  
  exit();
 }
?>
<html>
<head>
 <meta http-equiv="content-type" content="text/html; charset=big5">     
</head>  
 
<body bottommargin="0" leftmargin="0" topmargin="0" rightmargin="0">     
 <p>輸出格式         
 <a href="<?php echo $PHP_SELF;?>?ext=doc&contenttype=application/msword" target = ‘office’>word</a>          
 </p>  
</body>
</html>

 

Read Full Post »

假如要以 @ 和 . 為分隔字元,已前我可能會透過迴圈或先經過字元代換後來處理,可使今天學到,原來用正規表示法做字串分割是多麼的優美,如下
$email = ‘a@xyz.net.tw’;
print_r( preg_split(‘/[@.]/’, $email) );
 
執行結果如下:
Array ( [0] => a [1] => xyz [2] => net [3] => tw )

Read Full Post »