檔案上傳編碼問題
用Flash+PHP實現檔案的批量上傳。PHP在儲存檔案時,遇到編碼問題:
PHP code
檔案名稱很不規範,有中文、英文、法文、俄文、……不確定類型,這時候有些檔案儲存下來,要麼是亂碼,要麼被截斷(副檔名都丟失了)。iconv('utf-8','gbk',$_POST['fn']),這裡的問題?該如何做?
------解決方案--------------------
你當前頁面用了utf-8
header("Content-Type:text/html;charset=utf-8");
而這個應不該轉成gbk
$uploadfile=$uploaddir.iconv('utf-8','gbk',$_POST['fn']);
去掉或是
$uploadfile=$uploaddir.iconv('gbk','utf-8', $_POST['fn']);
試試
------解決方案--------------------
GBK編碼的字串沒有俄文這些符號。也就是說它只適用於中文
建議你用utf-8來儲存,檔案名稱亂碼的問題就這麼撂著吧
------解決方案--------------------
$uploadfile = $uploaddir . base64_encode($_POST['fn']) . '.' . pathinfo($_POST'fn'], PATHINFO_EXTENSION);
------解決方案--------------------
你資料來源是GBK要怎子搞呢。
iconv用//IGNORE忽略特殊符號轉成UTF8、要麼就重新命名。
------解決方案--------------------
你自己在你的windows機上能夠輸入俄文,阿拉伯文命名一個檔案嗎?
檔案名稱要視乎客戶作業系統的編碼,一般國內使用者用的都是中文版windows,系統預設內部編碼屬GBK,GBK怎麼可能包含俄文之類的語種呢。或者換過來說你讓作業系統編碼為iso-8859-1的使用者下載你的中文名檔案,中文即使給你轉成gbk還不一樣亂碼。乾脆就隨機命名好了,不然有啥好方法,全世界各地不同的作業系統使用者系統編碼千差萬別,除非所有都統一用utf-8做內碼,你這邊也不用費勁用iconv轉了。
你看我現在用ubuntu,系統編碼就是utf-8的,那些中文俄文法文你不轉GBK對我這種使用者就算正常的,你轉GBK倒還亂碼了。呵呵。