2016-05-16 74 views
1

我想設置內容Disposition首部獲得自定義的文件名,而在IE 11IE 11不解析HTTP內容處理標頭正確

我面臨的IE 11非常奇怪的行爲進行文件下載:當內容處理標題的文件名中出現escape(U + 001B)char字符。IE 11不能設置正確的文件名(在Content Dispostion Header中提供)。例如content_disposition與格式化file_name_1觸發IE 11的錯誤,但file_name_2格式化罰款:

# There are invisible control character escape (U+001B) 
name = u'_$B!' 
file_name_1 = quote(name) # gives "_%1B%24B%21" 
file_name_2 = "_%24B%21.pdf" 
content_disposition = "attachment; filename*=utf-8''%s" % file_name_2 

是否有提供支持,IE11任何UTF8文件名中的任何方式。

注意:在所有其他瀏覽器一切似乎很好地工作,我希望有辦法解決IE 11的行爲不會破壞其他瀏覽器...

+0

我不明白 - 爲什麼首先會想要一個文件名中的*不可見*字符嗎?這可能是某種安全過濾器。 –

+0

@Pekka웃地點在那裏並不重要,%1B可能在文件名的任何地方,問題是如果%1b存在 - 文件名將被錯誤地顯示。另外,我無法控制我將作爲文件名放置的數據。 –

+0

你在IE11中得到了什麼文件名? –

回答

1

建議在形成內容處置標題前去除控制字符(更多信息請參閱@JulianReschke答案)。

在Python Control codes可以輕鬆地與list comprehensionord剝離:

# There are invisible control character escape (U+001B) 
name = u'_$B!' 
# All chars with ord(s) <= 31 is a control characters. 
name = "".join(i for i in name if ord(i) > 31) 

所以加入上面的代碼行後,一切開始做工精細:

name = u'_$B!' 
# Strip control codes 
name = "".join(i for i in name if ord(i) > 31) 

file_name_1 = quote(name) # gives "_%1B%24B%21" 
file_name_2 = "_%24B%21.pdf" 
content_disposition = "attachment; filename*=utf-8''%s" % file_name_2 
2

不接受字符,例如這些實際的規範建議是什麼。請參閱https://greenbytes.de/tech/webdav/rfc6266.html#rfc.section.4.3.p.5

「收件人應該刪除或替換已知會導致用戶界面和文件名中出現混淆的字符序列,例如控制字符以及前導空白和尾隨空白。

當然,人們可能會爭論什麼讓其餘字符在某種程度上更好,但重要的一點是建議用戶代理去除控制字符。

+0

你是對的,如果我沒有其他選擇,我很可能會去除控制字符 –