(本着做为中华民族虚心的原则,首先注明本文乃作者自己经几番波折得到的总结,不可全信)
问题描述:
通过php上传中文名称的文件,上传过后下载该中文名称的文件时候出现了乱码问题。
出现原因:
通过php上传文件的时候,并没有采用utf-8的编码方式上传,但是在网页上通过<a>标签下载的时候,浏览器寻找中文文件名的时候是通过utf-8编码方式来查找的。
(网站的学习作者也是浅尝辄止,关于网站服务端,客户端等机制没有足够的了解)
正确的做法:
在通过php上传文件的时候先把文件存储的路径设置成utf-8的编码格式,下载的时候,要先把获取的文件路径转换成utf-8编码。
正确上传代码:
<form action="importmonthexcel.php" method="post" id="form1" enctype="multipart/form-data"> <?php echo "<input id='chimproj' name='ChoseFile1' type=file value=init />"; echo "<input type='submit' value='确定' />"; // 下面的代码只是为了让$_POST通道不为空 echo "<input id='submitjudge' name='fasdf' value='fasdfasdfasdfasdfas' type=hidden />"; ?> </form>
<?php // 需上传文件已选好,进行以下操作 if($_POST){ header("Content-type: text/html; charset=GB2312"); date_default_timezone_set("Asia/Chongqing"); // 必须是 .xls 或者 .xlsx文件, 而且必须小于5Mb if(($_FILES["ChoseFile1"]["type"] == \ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" \ || $_FILES["ChoseFile1"]["type"] == "application/vnd.ms-excel") \ && $_FILES["file"]["size"] < 5242880){
move_uploaded_file($_FILES["ChoseFile1"]["tmp_name"], \ // 上传后保存的路径设置成为UTF-8编码 iconv("gb2312","UTF-8","uploadfile/" . $_FILES["ChoseFile1"]['name'])); echo "<script>alert(\"导入成功\");</script>";
// 自动关闭窗口 echo "<script>window.opener=null; window.open('','_self'); window.close(); </script>";
}else{ echo "导入失败"; } } ?> |
正确下载代码:
// $filepath是中文名称文件的路径 // 下载时把utf-8的路径转换成网页的编码格式 $filepath = iconv("UTF-8", "gb2312", $filepath); echo "<a href=\"$filepath\">下载</a>"; |