UTF 8 的中文檔名上傳問題

2022-08-17 16:57:17 字數 1832 閱讀 3819

在上傳檔案後,一般都會用 

move_uploaded_file()

進行檔案移動改名。但是 move_uploaded_file() 並不支援 utf-8 編碼,如果含有,那麼函式就會執行失敗,但是這個函式是支援 gb2312 或者是 gbk 編碼的,因此可以利用 iconv() 函式先進行名字轉換來來解決問題。有兩種情況:

1. 伺服器是中文 windows 環境

在伺服器是中文 windows 環境下,由於中文 windows 系統的編碼是 gb2312,那麼可以如下使用**:

[plain text] 純文字檢視

複製**?1

2$upload_file = iconv("utf-8", "gb2312", $_files["myfile"]["name"]);

move_uploaded_file($_files["myfile"]["tmp_name"], $upload_file)

上面**的意思是,先用 iconv() 函式對上傳檔名轉換為 gb2312 碼(上傳的檔名若含有中文,那麼使用 utf-8 編碼),然後再進行 move_uploaded_file() 改名。這樣在中文系統下就可以正常顯示了。但是 linux 系統本身就是使用 utf-8 來編碼的,因此想要在 linux 下正常顯示中文,那麼就再次 iconv() 轉換一下,這是下面所說的第 2 種情況。

2. 伺服器是 linux 系統

如上面所講,利用 move_uploaded_file() 函式支援 gbk 的特性,那麼我們可以利用再次轉換的小技巧使上傳的檔名中含有中文的檔案在 linux 下也能正常顯示中文名稱,如下面**所示:

[php] 純文字檢視

複製**?01

0203

0405

0607

0809

1011

<?php

$upload_file= iconv("utf-8","gbk",$_files["myfile"]["name"]);//先轉換名字為 gbk 編碼

if(move_uploaded_file($_files["myfile"]["tmp_name"],$upload_file))else

?>

執行輸出:

<1> 上傳乙個檔名中含有中文的檔案:

<2> 檢查在 linux 下是否正常顯示:

utf-8 編碼網頁無法在 big5 系統正確處理中文件名,原因在於 move_uploaded_file() 不能處理 utf-8 中文編碼,需利用 iconv() 函式作轉碼,解決方法如下:

請將move_uploaded_file($_files['myfile']['tmp_name'], $uploadfile)改為

move_uploaded_file($_files['myfile']['tmp_name'], iconv("utf-8", "big5", $uploadfile))

Serv u 上傳 xls 中文檔名錯誤

serv u 上傳中文檔案出錯的解決方案 為什麼用serv u9建ftp伺服器時的上傳錯誤,我的那個賬戶已經開啟了所有許可權,但是上傳檔案的時候總是有錯誤提示 將檔案複製到ftp伺服器的時候發生錯誤,請檢查是否有許可權將檔案放到伺服器上。詳細資訊 200 type set to i 227 ente...

wordpress上傳含中文檔名出現亂碼

一 首先到ftp裡面找到wp admin includes file.php這個檔案。二 查詢wp handle upload在檔案裡面找到以下 function wp handle upload file,overrides false,time null new file uploads pat...

php上傳中文檔名亂碼問題處理方案

php上傳檔案是最最基礎的乙個技術點,但是深入進去也有不少問題需要解決,這不,上傳中文檔案後,檔名變成了亂碼。下面是問題 很簡單 1.問題 html部分 複製 如下 enctype multipart form data filename php部分 複製 如下 if files file erro...