WAMP環境UTF8編碼上傳中文名文件文件名亂碼

測試環境:

windows7 php5.5.12 apache2.4.9


form表單

<form action="http://127.0.0.1/" method="post"  enctype="multipart/form-data">
    <input type="file" name="MAX_FILE_SIZE" value="1000000" />
    <input type="submit" name="submit">
</form>


PHP處理代碼

if($_SERVER["REQUEST_METHOD"] == "POST"){
	var_dump($_FILES);
	$info = pathinfo($_FILES["MAX_FILE_SIZE"]['name']);
	move_uploaded_file($_FILES["MAX_FILE_SIZE"]['tmp_name'],'fx\\'.$_FILES["MAX_FILE_SIZE"]['name']);
	exit();
}

測試一:

1、form表單文件 和 PHP文件均爲utf8編碼

2、選擇中文名稱文件提交上傳後,輸出$_FILES數組,文件名顯示正常

3、服務器磁盤文件名亂碼,文件內容正常

測試二:

1、更改form表單頁面編碼爲GBK PHP處理頁面代碼爲UTF8

2、選擇中文名稱文件上傳,輸出$_FILES數組,文件名亂碼

3、服務器磁盤文件名正常,文件內容正常


結論:

因目前只有window服務器環境,所以暫且在window環境下總結爲服務器在處理文件上傳時,無論頁面是何種編碼,可能因爲是windows服務器的原因,讀取上傳的文件名稱時始終採用的是gbk編碼,所以當提交頁面不是採用gbk編碼方式提交時,就會亂碼。解決方法爲:

1、保障提交頁面編碼和處理頁面編碼一致,纔不會導致處理頁面獲取到的信息亂碼

2、提交頁面編碼爲gbk則不會導致上傳到服務器的中文名文件文件名亂碼

3、若提交頁面不是GBK編碼,處理頁面在寫入文件時,應將文件名轉爲gbk編碼 iconv("提交頁面編碼","gbk",文件名)

4、因爲目前測試環境只有windows服務器,所以將亂碼的原因歸結爲服務器讀取文件名的編碼格式原因導致非gbk提交頁面文件名亂碼,若你有其他測試環境,麻煩幫忙測試 謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章