iT邦幫忙

0

上傳中文檔名到主機裡就變亂碼

php

想請問各位前輩

我寫了上傳檔案的功能
可是中文檔名傳到雲端主機就會變亂碼
$from=$_FILES["upFile"]["tmp_name"];
$to=$file."/".mb_convert_encoding(date("Ymd").$_FILES["upFile"]["name"],iconv("big5","utf8"));
copy($from,$to)or exit("拷貝失敗");
這樣寫也沒辦法改變,
想請問要怎麼寫才能呢?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

4
weiclin
iT邦高手 4 級 ‧ 2014-12-22 17:50:52

你根本錯亂了吧?
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 )
看更多先前的回應...收起先前的回應...
weiclin iT邦高手 4 級 ‧ 2014-12-22 17:52:03 檢舉

還有, 你說的亂碼是長怎樣? 貼張圖來看看

jhu0717 iT邦新手 5 級 ‧ 2014-12-22 17:53:59 檢舉
jhu0717 iT邦新手 5 級 ‧ 2014-12-22 17:54:27 檢舉
jhu0717 iT邦新手 5 級 ‧ 2014-12-22 17:55:26 檢舉

20141222i幸福 å ¨å°åè³„å¤§ä¸²è¯ç¶²è·¯å•ç­”æ´»å‹•é–‹è·‘å›‰.doc

檔名會長像上面這個一樣

weiclin iT邦高手 4 級 ‧ 2014-12-22 18:12:17 檢舉

圖太小看不到..
就我自己的經驗, 如果你上傳那一頁 html是用 utf8編碼的話, 你上傳的檔名應該也是 utf8 不用再轉換

我過去的做法是。
是上傳的檔案檔名和圖案是分開的。
我會取出中文檔名後傳到資料庫儲存避免不同系統的意外。
然後檔名以上傳時間+暫存檔名編碼(用sha1或是md5)重新定義並和中文檔名一併進資料庫對應。
到了下載時再另外將他們合併後提供下載。
基本上是不太建議讓圖檔維持原中文檔名放在伺服器中。
這當中牽涉到如果不是下載而是要線上顯示的情形。

weiclin iT邦高手 4 級 ‧ 2014-12-22 18:21:15 檢舉

不過我自己是不會就這樣照原本的樣子存檔, 這有個安全上的問題
例如說, 有人用 php寫了惡意程式, 然後把檔名改成 xxx.php.whatever
上傳以後, 到 http://abc.com/files/xxx.php.whatever 你很可能會看到這支程式被執行
所以為了避免這類情況, 通常用 md5之類的生一個隨機的檔名給它, 不要放副檔名
原始的檔案名稱就存在資料庫吧

我要發表回答

立即登入回答