PHP附件下載中文名稱亂碼的解決方法
php一段代碼,處理文件下載時的文件名,后來客戶反饋說firefox,safari下的中文文件名不能正常顯示。
$file_info['title'] = rawurlencode($file_info['title']);
$filename=iconv('utf-8', 'gbk', $file_info['title']);
header("Content-Disposition:attachment;filename = " . $filename);
修正為以下內容后firefox,safari下正常顯示
如果沒有興趣請看簡版,一句話解決
if (preg_match("/Safari/", $ua)) {
header( 'Content-Disposition: attachment; filename*="UTF-8\'\'' . rawurlencode($file_info['title']) );
}
之前試過和firefox一樣處理方法,結果下載的文件名連擴展名都沒有了
header( 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode($file_info['title']) . '"' );
兜兜轉轉后發現去掉一對雙引號就可以,
求此時此刻內心的陰影面積
一堆代碼參考一下。
$filename = "中文 文件名.txt";
$encoded_filename = urlencode($filename);$encoded_filename = str_replace("+", "%20", $encoded_filename);// header("Content-Disposition:attachment;filename = " . $filename);
$encoded_filename = $file_info['title']
$ua = $_SERVER["HTTP_USER_AGENT"];
//IE
if(preg_match("/MSIE/", $ua) || preg_match("/Trident\/7.0/", $ua)){
header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
} else if (preg_match("/Firefox/", $ua)) {
header('Content-Disposition: attachment; filename*="utf8\'\'' . $filename . '"');
} else if (preg_match("/Safari/", $ua)) {
header( 'Content-Disposition: attachment; filename*=UTF-8\'\'' . $encoded_filename );
} else {
header('Content-Disposition: attachment; filename="' . $filename . '"');
}
FIGHTING---EVEREY BODY

浙公網安備 33010602011771號