php上傳文件中文名變亂碼及下載時找不到文件

        做一個文件上傳下載的功能,做好後上傳英文名的文件沒問題,上傳中文名的文件後,文件名變成了亂碼。後來查到,PHP默認是將文件名轉成UTF-8編碼來保存的,所以只要在上傳完成後使用iconv將文件名轉成GB2312編碼的就可以了:

$file= iconv( "UTF-8" , "gb2312//IGNORE" , $file );
move_uploaded_file($_FILES['upfile']['tmp_name'], $file);
後來做下載功能時又發現總是提示找不到文件,當然是做了處理,讓它自己報出來的:

if(!file_exists($file_dir . $file_name))
	{
	echo "<script>alert('文件找不到');</script>";
	exit;
	}
一開始總以爲路徑問題,後來怎麼改也沒用,突然想是否和編碼有關,於是又將要下載的文件名做了一下轉換:

$file_name = iconv("UTF-8" , "gb2312//IGNORE", $row['upfile']);
$file_dir = iconv("UTF-8" , "gb2312//IGNORE", "./uploadfile/");
$row是從數據庫中取出的數據,其中有upfile這個字段,用來存上傳文件名。這下就可以順利下載了。

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