2016-05-16 18 views
1

HTTPコンテンツ配置ヘッダを解析しませんIE 11にIE 11が正しく

をファイルのダウンロードを行いながら、私はIE 11で非常に奇妙な行動に直面したカスタムファイル名を取得するために、コンテンツ配置ヘッダを設定しようとしていますContent Dispositionヘッダーのファイル名にエスケープ文字(U + 001B)があります。IE 11は適切なファイル名を設定できません(Content Dispostionヘッダーで提供されます)。たとえば、フォーマットされたfile_name_1content_dispositionは、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 codeslist 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

"受信者は、制御文字や先頭と末尾の空白など、ユーザーインターフェイスとファイル名の両方で混乱を招くことが知られている文字列を取り除くか置き換えるべきです(SHOULD)。

もちろん、残っている文字を維持することは何とかなると主張できますが、ユーザーエージェントは制御文字を取り除くことをお勧めします。

+0

あなたが正しいです、私は他のオプションを得ることができない場合、私は制御文字を取り除くでしょう –