2013年7月30日 星期二

PHPExcel - 中文檔名與路徑的問題

在 Windows 環境底下,檔名仍然使用 Big5 編碼。但是現在內容都採用 utf-8,所以檔名變數要用 iconv 轉成 Big5

$filename = iconv('UTF-8','Big5',$filename);

但是 UTF-8 的字碼比較多,Big5 比較少,所以轉到 Big5 之後有些字出不來,會發生 iconv() : detected an illegal character in input string 的問題。所以應使用 //IGNORE ,將特殊字元忽略。另外,開頭最好不要有空白,所以再加上 trim 處理。

$filename = iconv('UTF-8','Big5//IGNORE',trim($filename));

而且這一行到底要放哪裡,蠻奇怪的。沒有這一行,會出現的錯誤訊息是
Warning: fopen(\\192.168.1.1\Public\有限公司_2013-07-30_12-08-27.xls): failed to open stream: Invalid argument inE:\xampp\sites\website\packages\PHPExcel\Classes\PHPExcel\Shared\OLE\PPS\Root.php on line 91

Warning: fopen(\\192.168.1.1\Public\有限公司_2013-07-30_12-08-27.xls): failed to open stream: Invalid argument inE:\xampp\sites\website\packages\PHPExcel\Classes\PHPExcel\Shared\OLE\PPS\Root.php on line 92

Fatal error: Uncaught exception 'Exception' with message 'Can't open \\192.168.1.1\Public\有限公司_2013-07-30_12-08-27.xls. It may be in use or protected.' in E:\xampp\sites\website\packages\PHPExcel\Classes\PHPExcel\Shared\OLE\PPS\Root.php:95 Stack trace: #0 E:\xampp\sites\website\packages\PHPExcel\Classes\PHPExcel\Writer\Excel5.php(233): PHPExcel_Shared_OLE_PPS_Root->save('\\192.168.1.1...') #1 E:\xampp\sites\website\quotation_excel.php(399): PHPExcel_Writer_Excel5->save('\\192.168.1.1...') #2 {main} thrown inE:\xampp\sites\website\packages\PHPExcel\Classes\PHPExcel\Shared\OLE\PPS\Root.php on line 95

有時候,iconv那一行放在自己的寫的網頁裡面無效,要放到錯誤訊息裡面提示的那個檔案才可以。於是我在那邊新增這一行,好了,可以下載 Excel 檔。

想一想,沒道理,為什麼不能在自己網頁先轉換,一定要去動到原始套件?於是把 Root.php 那一行刪掉,再放回自己網頁看看。咦,也正常了。

其實還有一因素:網頁內容的編碼。後來發現 PHPExcel 那支 Root.php ,它的編碼是 Big5。如果用 Dreamweaver,進去 屬性 > 頁面屬性 > 標題/編碼,可以看到 "編碼方式" 是 "繁體中文 Big5" 。可能跟這個也有關。









沒有留言:

張貼留言