解決PHP在IE瀏覽器下載文件,中文文件名亂碼問題

今天商服提出一個問題:“使用360瀏覽器導出 已發貨的訂單 出現文件名稱亂碼”.

問題人家已經提出來了。解決。

前提:我們網站所有文件全部使用的是UTF-8 NO BOM的編碼方式

1、找測試重現。360瀏覽器下載的呵呵,果然文件名是亂碼。再請測試在ie瀏覽器下測試。IE9,8,7也全部是亂碼。查看編碼就是UTF-8.由此可見,不是編碼問題造成的。使用firefox8 測試很正常。猜想是因爲ie的某些特殊的設置導致的問題。

2、以"PHP ie 下載 文件名亂碼"爲關鍵字搜索。果然,ie對中文文件名的下載文件是需要特殊處理的。

3、網上一哥們如是說:

如果$file_name是UTF-8編碼的,比如文件名爲測試.html;
ie這時就搞些小情緒,文件名變成了亂碼了

在RFC2231的定義裏面, 多語言編碼的Content-Disposition應該這麼定義:
Content-Disposition: attachment; filename*="utf8''%E6%B5%8B%E8%AF%95.html"
即:
filename後面的等號之前要加 *
filename的值用單引號分成三段,分別是字符集(utf8)、語言(空)和urlencode過的文件名。
所以這時應該對文件名進行url編碼轉換 ,使用php的urlencode很輕鬆就搞定了

因此,以上代碼應該加上url編碼轉換

$file_name = urlencode($file_name); 

查找代碼,找到文件名的地方,判斷如果是ie 就對文件名稱進行urlencode.

提交,測試。ok。問題解決。再次,多謝網友的無私奉獻。

參考:

http://xiaoyangok.iteye.com/blog/839814

http://www.jb51.net/article/27100.htm

http://www.oschina.net/code/snippet_12_583?from=rss 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章