透過 Content-Type: application/octet-stream 讓動態內容作檔案下載,用 Content-Disposition 設定檔名。基本寫法:
header('Content-Disposition: attachment; filename=' . $filename);
但若 $filename 為 UTF-8 編碼,部分瀏覽器無法正常處理。儲存為 UTF-8 後:IE6 亂碼、FF3 只顯示「中文」兩字、Opera 9 正常。
Content-Disposition: attachment; filename*="utf8''%E4%B8%AD%E6%96%87%20%E6%96%87%E4%BB%B6%E5%90%8D.txt"
*urlencode() 不同:PHP 空格編為 +,此處需編為 %20attachment; filename=""attachment; filename="UTF-8檔名" 和 attachment; filename*="utf8''"attachment; filename="UTF-8檔名"$encoded_filename = urlencode($filename);
$encoded_filename = str_replace("+", "%20", $encoded_filename);
header('Content-Type: application/octet-stream');
$ua = $_SERVER['HTTP_USER_AGENT'];
if (preg_match("/MSIE/", $ua)) {
header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
} else if (preg_match("/Firefox/", $ua)) {
header('Content-Disposition: attachment; filename*="utf8\'\'' . $filename . '"');
} else {
header('Content-Disposition: attachment; filename="' . $filename . '"');
}
print 'ABC';