做一个文件上传下载的功能,做好后上传英文名的文件没问题,上传中文名的文件后,文件名变成了乱码。后来查到,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这个字段,用来存上传文件名。这下就可以顺利下载了。