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


【項目背景】

項目中開發了統一的文件管理器,在其他如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;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM