php文件下载乱码问题
我想添加一个文件上传下载功能,由于文件可能较大,所以思路是在数据库中存储文件在服务器上的路径,下载时根据路径读取文件。最开始在上传时页面文件列表显示的中文文件名为乱码,添加了
mysql_query("SET NAMES 'utf8'");之后解决。后来在下载时存储的文件名为乱码,同样添加这个code解决。但是下载的文件里面的中文就成乱码了。我用txt文本测试,英文没问题,UTF-8格式的文本也没问题,默认的ANSI就成乱码,当然上传word文件也是乱码。大家帮忙看看应该怎么改,不知道是传到服务器就是乱码,还是下载下来格式没转换,我的数据库是UTF-8编码的,母版页也是UTF-8编码。
在原版的基础上做了一下修正:增加1st在线支付功能与论坛用户数据结合,vip也可与论坛相关,增加互动性vip会员的全面修正评论没有提交正文的问题特价商品的调用连接问题删掉了2个木马文件去掉了一个后门补了SQL注入补了一个过滤漏洞浮动价不能删除的问题不能够搜索问题收藏时放入购物车时出错点放入购物车弹出2个窗口修正定单不能删除问题VIP出错问题主题添加问题商家注册页导航连接问题添加了导航FLASH源文
<?php <br>
function DownloadFile($mineid,$notice=null){<br>
global $smarty;<br>
needLogin();<br>
//session_cache_limiter('private'); <br>
$session=Session::start();<br>
$curUser = $session->curUser;<br>
$logger = new CategoryLogger('log_definition');<br>
if($notice!="auto")notice($notice);<br>
<br>
$id=$mineid;//要下载文件的ID <br>
if(!isset($id) or $id=="") die("error:id none"); //定位记录,读出 <br>
$conn=mysql_connect('10.4.16.102','root','abc') or die('Unable to connect .'); <br>
mysql_select_db('greenmine',$conn) or die(mysql_error($conn));<br>
mysql_query("SET NAMES 'utf8'");<br>
$sql= "select * from file where id=$id"; <br>
$result= mysql_query($sql); <br>
if(!$result) die("error:mysql query"); <br>
$num=mysql_num_rows($result); <br>
if($num<1) die("error:no this recorder"); <br>
<br>
$data=mysql_result($result,0,"file_data"); //文件存储路径<br>
$type=mysql_result($result,0,"file_type"); <br>
$name=mysql_result($result,0,"file_name"); <br>
mysql_close($conn); <br>
<br>
$file_name=$name;<br>
$file_dir=$data;<br>
if (!file_exists($file_dir)) { //检查文件是否存在 <br>
echo "文件找不到"; <br>
exit; <br>
} else { <br>
$filePath = $file_dir;//此处给出你下载的文件在服务器的什么地方 <br>
$fileName = $file_name; <br>
//此处给出你下载的文件名 <br>
$file = fopen($filePath, "r"); // 打开文件<br>
<br>
Header("Content-type:application/octet-stream ");<br>
Header("Accept-Ranges:bytes ");<br>
Header("Accept-Length: " . filesize($filePath));<br>
Header("Content-Disposition: attachment; filename= " . $fileName); <br>
<br>
// 输出文件内容 <br>
echo fread($file, filesize($filePath)); <br>
fclose($file); <br>
exit; <br>
}<br>
}<br>
?>------解决方案--------------------
是文件名乱码,还是文件内容乱码?
你的库中只保存文件名,而文件是独立保存的。不是这样吗
打开文件要 $file = fopen($filePath, "rb");
供下载的文件名
Header("Content-Disposition: attachment; filename= " . $fileName);
要与用户所用操作系统配套










