网上下载的php文件是乱码,php文件下载乱码问题

我想添加一个文件上传下载功能,由于文件可能较大,所以思路是在数据库中存储文件在服务器上的路径,下载时根据路径读取文件。最开始在上传时页面文件列表显示的中文文件名为乱码,添加了 mysql_query("SET NAMES 'utf8'");之后解决。后来在下载时存储的文件名为乱码,同样添加这个code解决。但是下载的文件里面的中文就成乱码了。我用txt文本测试,英文没问题,UTF-8格式的文本也没问题,默认的ANSI就成乱码,当然上传word文件也是乱码。大家帮忙看看应该怎么改,不知道是传到服务器就是乱码,还是下载下来格式没转换,我的数据库是UTF-8编码的,母版页也是UTF-8编码。

curUser;$logger = new CategoryLogger('log_definition');if($notice!="auto")notice($notice);$id=$mineid;//要下载文件的ID if(!isset($id) or $id=="") die("error:id none"); //定位记录,读出 $conn=mysql_connect('10.4.16.102','root','abc') or die('Unable to connect .'); mysql_select_db('greenmine',$conn) or die(mysql_error($conn));mysql_query("SET NAMES 'utf8'"); $sql= "select * from file where id=$id"; $result= mysql_query($sql); if(!$result) die("error:mysql query"); $num=mysql_num_rows($result); if($num<1) die("error:no this recorder"); $data=mysql_result($result,0,"file_data"); //文件存储路径$type=mysql_result($result,0,"file_type"); $name=mysql_result($result,0,"file_name"); mysql_close($conn); $file_name=$name;$file_dir=$data;if (!file_exists($file_dir)) { //检查文件是否存在 echo "文件找不到"; exit; } else { $filePath = $file_dir;//此处给出你下载的文件在服务器的什么地方 $fileName = $file_name; //此处给出你下载的文件名 $file = fopen($filePath, "r"); // 打开文件Header("Content-type:application/octet-stream ");Header("Accept-Ranges:bytes ");Header("Accept-Length: " . filesize($filePath));Header("Content-Disposition: attachment; filename= " . $fileName); // 输出文件内容 echo fread($file, filesize($filePath)); fclose($file); exit; }}?>

回复讨论(解决方案)

是文件名乱码,还是文件内容乱码?

你的库中只保存文件名,而文件是独立保存的。不是这样吗

打开文件要 $file = fopen($filePath, "r b");

供下载的文件名

Header("Content-Disposition: attachment; filename= " . $fileName);

要与用户所用操作系统配套

是文件名乱码,还是文件内容乱码?

你的库中只保存文件名,而文件是独立保存的。不是这样吗

打开文件要 $file = fopen($filePath, "rb");

供下载的文件名

Header("Content-Disposition: attachment; filename= " . $fileName);

要与用户所用操作系统配套

…… 文件名是对的,里面的内容是乱码。文件单独保存在服务器上。改成rb也不好使

只要你没有对文件内容进行操作,那么只能说文件本身就是乱码的

只要你没有对文件内容进行操作,那么只能说文件本身就是乱码的 啊!问题解决了,把这个php页面的编码格式UTF-8+bom改成UTF-8就行了,同样谢谢斑竹!

请问楼主,上传doc或docx这种word文件,下载后打开文件内容是否正常显示?

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值