解決Safari瀏覽器下載文件文件名稱亂碼的問題

【項目背景】php

項目中開發了統一的文件管理器,在其餘如IE,Chrome,Firefox等下載正常,可是在蘋果Safari瀏覽器下載就會出現中文名稱亂碼問題。瀏覽器

 

【理論知識】app

主要是下載Header頭不符合RFC規範致使。參考文章:http://www.sohu.com/a/334506221_463987url

 

【如何解決】spa

設置統一的下載Header頭以下:code

<?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; }
相關文章
相關標籤/搜索