想請問各位前輩
我寫了上傳檔案的功能
可是中文檔名傳到雲端主機就會變亂碼
$from=$_FILES["upFile"]["tmp_name"];
$to=$file."/".mb_convert_encoding(date("Ymd").$_FILES["upFile"]["name"],iconv("big5","utf8"));
copy($from,$to)or exit("拷貝失敗");
這樣寫也沒辦法改變,
想請問要怎麼寫才能呢?
你根本錯亂了吧?
mb_convert_encoding 跟 iconv的參數都不對呀
<pre class="c" name="code">
string mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding = mb_internal_encoding() ] )
string iconv ( string $in_charset , string $out_charset , string $str )
還有, 你說的亂碼是長怎樣? 貼張圖來看看
20141222iå¹¸ç¦ å ¨å°åè³å¤§ä¸²è¯ç¶²è·¯åçæ´»åéè·å.doc
檔名會長像上面這個一樣
圖太小看不到..
就我自己的經驗, 如果你上傳那一頁 html是用 utf8編碼的話, 你上傳的檔名應該也是 utf8 不用再轉換
我過去的做法是。
是上傳的檔案檔名和圖案是分開的。
我會取出中文檔名後傳到資料庫儲存避免不同系統的意外。
然後檔名以上傳時間+暫存檔名編碼(用sha1或是md5)重新定義並和中文檔名一併進資料庫對應。
到了下載時再另外將他們合併後提供下載。
基本上是不太建議讓圖檔維持原中文檔名放在伺服器中。
這當中牽涉到如果不是下載而是要線上顯示的情形。
不過我自己是不會就這樣照原本的樣子存檔, 這有個安全上的問題
例如說, 有人用 php寫了惡意程式, 然後把檔名改成 xxx.php.whatever
上傳以後, 到 http://abc.com/files/xxx.php.whatever 你很可能會看到這支程式被執行
所以為了避免這類情況, 通常用 md5之類的生一個隨機的檔名給它, 不要放副檔名
原始的檔案名稱就存在資料庫吧