跨浏览器PHP下载文件名中的中文乱码问题解决方法
2017-09-14 00:00
961 查看
<?php $ua = $_SERVER["HTTP_USER_AGENT"]; $filename = "中文 文件名.txt"; $encoded_filename = urlencode($filename); $encoded_filename = str_replace("+", "%20", $encoded_filename); header('Content-Type: application/octet-stream'); if (preg_match("/MSIE/", $ua)) { header('Content-Disposition: attachment; filename="' . $encoded_filename . '"'); } else if (preg_match("/Firefox/", $ua)) { header('Content-Disposition: attachment; filename*="utf8\'\'' . $filename . '"'); } else { header('Content-Disposition: attachment; filename="' . $filename . '"'); } print 'ABC'; ?>
<?php header("Content-type:text/html;charset=utf-8"); // $file_name="cookie.jpg"; $file_name="圣诞狂欢.jpg"; //用以解决中文不能显示出来的问题 $file_name=iconv("utf-8","gb2312",$file_name); $file_sub_path=$_SERVER['DOCUMENT_ROOT']."marcofly/phpstudy/down/down/"; $file_path=$file_sub_path.$file_name; //首先要判断给定的文件存在与否 if(!file_exists($file_path)){ echo "没有该文件文件"; return ; } $fp=fopen($file_path,"r") or die('打开文件错误'); $file_size=filesize($file_path); //下载文件需要用到的头 //返回的文件流 Header("Content-type: application/octet-stream"); //按照字节格式返回 Header("Accept-Ranges: bytes"); Header("Accept-Length:".$file_size); //弹出客户端对话框,对应的文件名 Header("Content-Disposition: attachment; filename=".$file_name); //防止服务器瞬间压力增大,分段读取 $buffer=1024; $file_count=0; //向浏览器返回数据 while(!feof($fp) && $file_count<$file_size){ $file_con=fread($fp,$buffer); $file_count+=$buffer; echo $file_con; } fclose($fp); ?>
几点注意事项:
header("Content-type:text/html;charset=utf-8")的作用:在服务器响应浏览器的请求时,告诉浏览器以编码格式为UTF-8的编码显示该内容
关于file_exists()函数不支持中文路径的问题:因为php函数比较早,不支持中文,所以如果被下载的文件名是中文的话,需要对其进行字符编码转换,否则file_exists()函数不能识别,可以使用iconv()函数进行编码转换
$file_sub_path() 我使用的是绝对路径,执行效率要比相对路径高
Header("Content-type: application/octet-stream")的作用:通过这句代码客户端浏览器就能知道服务端返回的文件形式
Header("Accept-Ranges: bytes")的作用:告诉客户端浏览器返回的文件大小是按照字节进行计算的
Header("Accept-Length:".$file_size)的作用:告诉浏览器返回的文件大小
Header("Content-Disposition: attachment; filename=".$file_name)的作用:告诉浏览器返回的文件的名称
以上四个Header()是必需的
fclose($fp)可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区
相关文章推荐
- 跨浏览器PHP下载文件名中的中文乱码问题解决方法
- 解决跨浏览器下PHP下载文件名中的中文乱码问题
- 彻底解决跨浏览器下PHP下载文件名中的中文乱码问题
- 跨浏览器PHP下载文件名中的中文乱码问题解决方法
- 解决不同浏览器上中文文件名的下载乱码问题php验证可行的测试过ie ff 和chrome的
- 解决PHP Header强制下载IE文件名中文乱码问题
- 解决PHP在IE浏览器下载文件,中文文件名乱码问题
- Firefox、IE等浏览器下载文件名中文乱码的一种Server端解决方法
- 使用Content-Disposition: attachment; filename=FILENAME,在Firefox浏览器中下载文件,文件名中文乱码问题解决。
- 解决PHP在IE浏览器下载文件,中文文件名乱码问题
- PHP解决浏览器 下载文件 中文名称乱码问题--兼容大多浏览器
- 解决PHP在IE浏览旗下载文件,中文文件名乱码问题
- 解决PHP在IE中下载文件,中文文件名乱码问题
- php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
- [置顶] PHP解决浏览器 下载文件 中文名称乱码问题--兼容大多浏览器
- 解决不同浏览器上中文文件名的下载乱码问题
- php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
- php读mysql中文乱码问题解决方法
- 文件下载(解决中文文件名下载乱码问题) 收集
- 解决php URL地址传输乱码问题和下载文件名乱码的问题