簡體   English   中英

下載時Chrome無法識別網址編碼的文件名

[英]Chrome cannot recognize url encoded filename while downloading

我試圖從我的網站下載文件名為GB2312%D5%D5%C6%AC.JPG的文件,一切順利在IE9 / Firefox中,但在谷歌瀏覽器中沒有。

在谷歌瀏覽器中,此文件名將替換為我的下載頁面名稱(可能Chrome無法解碼文件名)。

要查看Chrome是否要解碼文件名,我嘗試使用另一個字符串GB2312%2C%2D%2E.txt作為文件名,firefox / IE9仍然按預期工作,但谷歌Chrome將嘗試解碼此文件名(替換% 2D帶' - ')。

如何防止Google Chrome解碼文件名? 如果我能在服務器端解決這個問題,那就更好了(PHP)

以下行是我的服務器生成的響應標頭。

**Response Headers:**
Cache-Control:must-revalidate, post-check=0, pre-check=0, private
Connection:keep-alive
Content-Description:File Transfer
Content-Disposition:attachment; filename="GB2312%D5%D5%C6%AC.JPG"
Content-Length:121969
Content-Transfer-Encoding:binary
Content-Type:application/force-download; charset=UTF-8
Date:Wed, 18 Apr 2012 03:32:30 GMT
Expires:0
Pragma:public
Server:nginx/1.1.5
X-Powered-By:PHP/5.3.8

我剛遇到這個問題。 這個問題很有幫助。

正如您所指出的,原因是Chrome正在嘗試對其進行解碼,而且它不在ASCII之內。 我個人稱它為蟲子。

基本上,讓它在Chrome中運行的答案就是使用:

Content-Disposition:attachment; filename*=UTF-8''GB2312%D5%D5%C6%AC.JPG

但是,這將在IE8和Safari中打破它。 啊! 所以為了讓它在那些工作中,嘗試像這個例子一樣

Content-Disposition:attachment; filename="GB2312%D5%D5%C6%AC.JPG"; filename*=UTF-8''GB2312%D5%D5%C6%AC.JPG

對我來說,我必須在將文件名放入文件名* = UTF-8之前對文件名進行url編碼。 所以我的第一個文件名和第二個文件名的值不一樣。 我使用PHP,我的代碼如下所示:

$encodedfilename = urlencode($downloadfilename);
header("Content-Disposition: attachment; filename=\"$downloadfilename\"; filename*=UTF-8''$encodedfilename");

所以我實際上並沒有像你要求的那樣停止編碼,但是我對它進行了編碼,然后將Chrome解碼后的參數傳遞回原來的版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM