国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

解析如何在PHP下載文件名中解決亂碼的問題

2024-05-04 23:10:48
字體:
供稿:網(wǎng)友
通過把Content-Type設(shè)置為application/octet-stream,可以把動態(tài)生成的內(nèi)容當(dāng)作文件來下載,相信這個大家都會。那么用Content-Disposition設(shè)置下載的文件名,這個也有不少人知道吧。基本上,下載程序都是這么寫的:

復(fù)制代碼 代碼如下:


$filename = "document.txt";
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $filename);
print "Hello!";
?>


但是,如果$filename是UTF-8編碼的,有些瀏覽器就無法正常處理了。比如把上面那個程序稍稍改一下:

復(fù)制代碼 代碼如下:


$filename = "中文 文件名.txt";
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $filename);
print "Hello!";
?>


輸出的header實際上是這樣子:
Content-Disposition: attachment; filename=中文 文件名.txt其實按照RFC2231的定義,多語言編碼的Content-Disposition應(yīng)該這么定義:
Content-Disposition: attachment; filename*="utf8''%E4%B8%AD%E6%96%87%20%E6%96%87%E4%BB%B6%E5%90%8D.txt"即:
•filename后面的等號之前要加 *
•filename的值用單引號分成三段,分別是字符集(utf8)、語言(空)和urlencode過的文件名。
•最好加上雙引號,否則文件名中空格后面的部分在Firefox中顯示不出來
•注意urlencode的結(jié)果與php的urlencode函數(shù)結(jié)果不太相同,php的urlencode會把空格替換成+,而這里需要替換成%20
經(jīng)過試驗,發(fā)現(xiàn)幾種主流瀏覽器的支持情況如下:
IE6
attachment; filename=""
FF3
attachment; filename="UTF-8文件名"
attachment; filename*="utf8''"
O9
attachment; filename="UTF-8文件名"
Safari3(Win)
貌似不支持?上述方法都不行
這樣看來,程序必須得這樣寫才能支持所有主流瀏覽器:

復(fù)制代碼 代碼如下:


$ua = $_SERVER["HTTP_USER_AGENT"];
$filename = "中文 文件名.txt";
$encoded_filename = urlencode($filename);
$encoded_filename = str_replace("+", "%20", $encoded_filename);
header('Content-Type: application/octet-stream');
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';
?>

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 卓尼县| 新津县| 民县| 武定县| 奈曼旗| 容城县| 双城市| 南宁市| 麻城市| 阿鲁科尔沁旗| 民权县| 虎林市| 怀柔区| 元阳县| 塔河县| 霍邱县| 府谷县| 墨玉县| 黄浦区| 原平市| 东丰县| 安丘市| 互助| 兴海县| 沾益县| 麟游县| 页游| 丹棱县| 红原县| 舒城县| 乌鲁木齐县| 从江县| 黔西县| 肥乡县| 汾阳市| 鹤壁市| 金湖县| 永吉县| 玉林市| 山东省| 怀来县|