UTF-8的檔案傳輸問題

edited 十月 2013 in 進階PHP討論
在XOOPS的NEWBB2中提供了文章附加檔案的功能,透過下面程式碼來避免非法的檔案存取:
header('Content-Type: '.$mimetype);
if (preg_match("/MSIE ([0-9]\.[0-9]{1,2})/", $HTTP_USER_AGENT)) {
	header('Content-Disposition: inline; filename="'.$file_display.'"');
	header('Expires: 0');
	header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
	header('Pragma: public');
} else {
	header('Content-Disposition: attachment; filename="'.$file_display.'"');
	header('Expires: 0');
	header('Pragma: no-cache');
}
readfile($file_saved);

這在ASCII基礎的環境沒問題(包括BIG5),但是UTF-8的環境中,PHP似乎預設會在字串的開始處寫入BOM字元,造成附加檔案下載後無法正常讀取(已知有問題格式: RAR, M$系列),但是壓縮成ZIP格式搭配英文檔名就OK。

我嘗試修改程式,讓它讀取檔案時忽略前三個位元組,但這好像不是程式能夠控制的範圍,所以最後下載的檔案還是有BOM字元。

在下面這個網頁的問答中也無法發現解決方式:
http://www.unicode.org/faq/utf_bom.html

下載後的檔案透過ULTRAEDIT去除前三個位元組就OK了,但是一般使用者應該不會想要這麼做吧,有人處理過這樣的問題嗎?

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=477
Sign In or Register to comment.