$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" 。可能跟這個也有關。
沒有留言:
張貼留言