PHP:解决Safari浏览器下载⽂件⽂件名称乱码的问题
【项⽬背景】
项⽬中开发了统⼀的⽂件管理器,在其他如IE,Chrome,Firefox等下载正常,但是在苹果Safari浏览器下载就会出现中⽂名称乱码问题。【理论知识】
【如何解决】
设置统⼀的下载Header头如下:
<?php
/**
* 获取下载⽂件所需headers头信息
*
* @param string $filename
* @param string $charset 默认UTF-8
* @param string $mimeType 默认application/octet-stream
* @return array
*/
public static function downloadHeaders($filename, $charset = 'UTF-8', $mimeType = 'application/octet-stream')
{
// 兼容各浏览器下载⽂件名乱码问题
if (preg_match("/MSIE/", $_SERVER["HTTP_USER_AGENT"])) {
$filename = urlencode($filename);
$filename = str_replace("+", "%20", $filename);// 替换空格
$attachment = "attachment; filename=\"{$filename}\"; charset={$charset}";
} else if (preg_match("/Firefox/", $_SERVER["HTTP_USER_AGENT"])) {
$attachment = 'attachment; filename*=utf-8\'\'' . $filename;
} else if (preg_match("/Safari/", $_SERVER["HTTP_USER_AGENT"])) {
$filename = rawurlencode($filename); // 注意:rawurlencode与urlencode的区别
$attachment = 'attachment; filename*=utf-8\'\'' . $filename;
} else {
$attachment = "attachment; filename=\"{$filename}\"; charset={$charset}";
}
$headers = [
'Cache-Control' => 'public, must-revalidate, max-age=0',
'Content-Type'  => $mimeType,
'Content-Disposition' => $attachment,
]
chrome直接下载;
return$headers;
}