2009-09-28 4 views
3

У меня проблема с загрузкой имен файлов с точкой с запятой в них в IE8.Точка с запятой в Content-Disposition filename

Response.AddHeader("Content-Disposition", "attachment; filename=\"" + attachment.File.FileName + "\""); 

Предполагая, что attachment.File.FileName = "Тест, Тест, Test.txt"

FF 3.5: Он предложит сохранить/открыть файл с именем «Test, Test, Test. текст". Это желаемый результат.

IE8: Он предлагает вам сохранить/открыть файл с именем «Тест».

Мне нужно выяснить, как получить желаемый результат в IE8.

ответ

2

Вы сделали тест, используя escape-последовательность для; (% 3В)?

Response.AddHeader("Content-Disposition", "attachment; filename=\"file%3Bfile%3B.txt\""); 
+1

Это действительно работает для InternetExplorer, но это сломано в браузерах, которые следует РЛК (например, Firefox): процент-кодирование только допускаемые RFC2231, но это также необходимо использовать и звезды и два вершины: 'filename * = utf-8'en'name% 20with% 20percent% 20encoding' – lapo

+3

Это синтаксис, специфичный для IE. Не. –

+0

Вопрос очень ясен: «Чтобы выяснить, как получить желаемый результат в IE8». Поскольку IE не использует RFC, вы должны включить определенный патч, чтобы заставить это работать в этом браузере. – Rodrigo

-1

проверить состояние IE и использовать URLEncoder.encode. Это будет работать.

Например .: if (isIE) { fileName = URLEncoder.encode(fileName, "UTF-8"); }

+0

Нет. Избегайте использования специальных кожухов UA. Это приводит к большому количеству вреда в долгосрочной перспективе (например, к незанятым/непроверенным ветвям кода). –

+0

К сожалению, имена файлов Content Disposition не обрабатываются последовательно в разных браузерах. Sniffing неизбежно, если вы хотите обрабатывать имена файлов nonascii. – Antimony

 Смежные вопросы

  • Нет связанных вопросов^_^