2012-04-18 52 views
6

Tôi đã cố tải xuống tệp có tên tệp GB2312% D5% D5% C6% AC.JPG từ trang web của tôi, mọi thứ diễn ra tốt trong IE9/Firefox, nhưng không có trong Google Chrome.Chrome không thể nhận dạng tên tệp được mã hóa url trong khi tải xuống

Trong Google Chrome, tên tệp này được thay thế bằng tên trang tải xuống của tôi (Có thể Chrome không giải mã được tên tệp).

Để tìm hiểu xem Chrome có đang giải mã tên tệp hay không, tôi đã thử sử dụng một chuỗi khác GB2312% 2C% 2D% 2E.txt làm tên tệp, firefox/IE9 vẫn hoạt động như mong đợi, nhưng Google Chrome sẽ cố giải mã tên tệp (thay thế% 2D bằng '-').

Làm cách nào để ngăn Google Chrome giải mã tên tệp? Tốt hơn nếu tôi có thể giải quyết vấn đề này ở phía máy chủ của tôi (PHP)

Các dòng sau đây là tiêu đề phản hồi được tạo bởi máy chủ của tôi.

**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 
+0

tại sao bạn cần phải mã hóa tên tệp? –

+0

Tệp này được đăng bởi người dùng chứ không phải phía máy chủ. thực ra nó là một tệp đính kèm thư, nói cách khác, đây là tên tệp gốc, tôi không làm gì với nó. – sailing

Trả lời

3

Tôi vừa gặp vấn đề này. This question hữu ích.

Nguyên nhân là, như bạn đã chỉ ra, Chrome đang cố gắng giải mã nó và nó nằm ngoài ASCII. Tôi sẽ gọi nó là một lỗi, cá nhân.

Về cơ bản các câu trả lời để làm cho nó làm việc trong Chrome là sử dụng này:

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

Tuy nhiên, điều này sẽ phá vỡ nó trong IE8 và Safari. Ugh! Vì vậy, để có được nó làm việc trong những người là tốt, hãy thử làm điều đó như this example.

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

Đối với tôi, tôi phải mã hóa url tên tệp trước khi đặt tên tệp * = UTF-8. Vì vậy, giá trị của tôi cho tên tập tin đầu tiên và thứ hai là không giống nhau. Tôi sử dụng PHP và mã của tôi trông như thế này:

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

Vì vậy, tôi không thực sự ngăn chặn nó từ mã hóa như bạn yêu cầu, nhưng tôi mã hóa nó và sau đó vượt qua các tham số đó được giải mã bởi Chrome, trở lại với những gì đó là nghĩa vụ phải.

Các vấn đề liên quan