关于通过网站下载中文名称的文件的编码问题

(本着做为中华民族虚心的原则,首先注明本文乃作者自己经几番波折得到的总结,不可全信)

 

问题描述:

          通过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>";

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江湖上都叫我秋博

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值