php上傳中文檔案檔案名稱亂碼的解決方法:在html檔案的head標籤中間加入相關語句,讓編碼保持統一,程式碼為【
#php上傳中文檔案檔案名稱亂碼的解決方法:
方法一:猜測一下,也許我的系統在創建中文檔案的時候會亂碼,於是我將程式碼改寫了一下:
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/测试数据.txt");登入後複製結果建立成功,沒有亂碼。 。。也就是說不是系統問題。
想一下,我的php檔案本身是utf8編碼的,那麼
move_uploaded_file($_FILES["file"]["tmp_name"],"upload/测试数据.txt");登入後複製這個語句肯定使用的是utf8編碼,那麼之前上傳的文件名肯定就不是utf8編碼了,那麼以下的語句肯定是錯誤的,因為來源字串本身就不是utf8編碼的:
iconv("UTF-8","gbk//TRANSLIT",$_FILES["file"]["name"]);登入後複製使用函數檢查來源字串的編碼:
$e=mb_detect_encoding($text, array(‘UTF-8’, ‘GBK’,’gb2312’));2 echo $e;登入後複製結果是CP936,也就是來源字串編碼是GBK。
試試看
move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . iconv("gbk","UTF-8",$_FILES["file"]["name"]));登入後複製問題解決,不再亂碼
##方法二:其實還有一個解決辦法,就是在html檔案的head標籤中間加入
從而使編碼保持統一,也就不需要再轉碼了##結論<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />登入後複製
使用iconv函數可以解決上傳中文檔案名稱亂碼的問題,實際上iconv能解決各種各樣的由於編碼不統一造成的亂碼問題。
相關學習推薦:- 使用iconv函數請先檢查來源字串的編碼,除非你已經確定了原始字串的編碼。
- 盡量保證所有的程式碼的編碼一致,萬不得已才使用iconv函數。
- 吐槽一下,盡量不使用中文文件名作為伺服器上保存的文件名,請將文件名轉化成自己的文件名(即使是英文檔案名稱也請轉換一下)。
PHP程式設計從入門到精通以上是php上傳中文檔案名稱亂碼怎麼辦?的詳細內容。更多資訊請關注PHP中文網其他相關文章!