当前位置:Gxlcms > PHP教程 > PHP实现多种格式文件下载并解决乱码问题

PHP实现多种格式文件下载并解决乱码问题

时间:2021-07-01 10:21:17 帮助过:22人阅读

这几天写项目,遇到一个问题,一般的文件下载还好说,但是如果是中文且有多种格式的文件下载就比较棘手,调了很久的BUG,

终于完成,其中需要注意以下几点:

1.对于文件名是中文的文件,要记得转码,防止中文乱码的发生,因为大部分的主机的编码是GB2312的,而我们用的是UTF-8,

所以在操作之前要用iconv()函数进行转码,防止找不到文件而报错。

2.需要对所要下载的文件的格式进行判断,根据格式再写header()函数。

具体代码如下:

Cannot be used for ". $file_extension ." files!"); break;
 
      default: $ctype="application/force-download";
    }
 
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: public"); 
    header("Content-Description: File Transfer");
     
    header("Content-Type: $ctype");
 
    $header="Content-Disposition: attachment; filename=".$filename.";";
    header($header);
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".$len);
    readfile($file);

?> 

对于适配不同浏览器,避免发生中文乱码错误,本人在网上找到一段代码,可以避免,代码如下:

	$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 . '"');
	}
 
?>

我没有用这段代码的原因是上面我写的代码我试了一下如:Firefox,IE,Opera,360等这些浏览器,没有发生因为浏览器问题

产生的乱码错误,我认为,转码后中文乱码的问题基本就解决了。

本人经验,仅供参考!

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上就介绍了PHP实现多种格式文件下载并解决乱码问题,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

人气教程排行