首頁 >後端開發 >PHP問題 >php上傳中文檔案名稱亂碼怎麼辦?

php上傳中文檔案名稱亂碼怎麼辦?

coldplay.xixi
coldplay.xixi原創
2020-07-18 14:33:573491瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

相關文章

看更多