itsharehome

【项目背景】

项目中开发了统一的文件管理器,在其他如IE,Chrome,Firefox等下载正常,但是在苹果Safari浏览器下载就会出现中文名称乱码问题。

 

【理论知识】

主要是下载Header头不符合RFC规范导致。参考文章:http://www.sohu.com/a/334506221_463987

 

【如何解决】

设置统一的下载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,
        ];

        return $headers;
    }

 

分类:

技术点:

相关文章:

  • 2021-05-06
  • 2021-09-12
  • 2021-11-10
  • 2021-11-19
  • 2022-01-08
  • 2022-02-01
  • 2021-09-15
  • 2021-10-19
猜你喜欢
  • 2021-10-07
  • 2021-12-11
  • 2021-08-06
  • 2021-12-27
  • 2021-11-21
相关资源
相似解决方案