Кодировка в названиях вложений через IE

Запросы на решение проблем

Модератор: ykolesnikov

Ответить
chin-smoker
OTRS Новобранец
Сообщения: 12
Зарегистрирован: 11 дек 2013, 16:24

Кодировка в названиях вложений через IE

Сообщение chin-smoker » 03 мар 2014, 14:35

Добрый день!
Есть следующий набор:
FreeBSD 9.1-RELEASE
OTRS 3.2.11
Apache22
mysql-server-5.5

Проблема с кодировкой имен прикрепленных к тикетам файлов при попытке скачать их через IE. При этом хром отрабатывает имена нормально.
Нашел на форуме тему с аналогичной проблемой viewtopic.php?f=5&t=1491&p=7631&hilit=% ... 0%B0#p7631, но в моем случае правка Layout.pm никак не повлияла на результат.
Более того, пытался обновить OTRS до версии 3.3 в надежде на исправление ситуации - не помогло, плюс всплыли другие косяки с которыми сейчас нет времени разбираться.
Подскажите плз, куда еще можно посмотреть?

ykolesnikov
OTRS Гуру
Сообщения: 3119
Зарегистрирован: 24 дек 2010, 09:27
Откуда: Череповец
Благодарил (а): 4 раза
Поблагодарили: 5 раз
Контактная информация:

Re: Кодировка в названиях вложений через IE

Сообщение ykolesnikov » 03 мар 2014, 18:57

Для начала сообщите версию IE и соответствует ли она заявленным в Release Notes для Вашей версии OTRS.
С уважением Юрий Колесников
OTRS 5.0.22, ITSM 5.0.22
OpenSuse 13.2, MariaDB 10.0.22
OTRS 5.0.22, ITSM 5.0.22 тестовая

chin-smoker
OTRS Новобранец
Сообщения: 12
Зарегистрирован: 11 дек 2013, 16:24

Re: Кодировка в названиях вложений через IE

Сообщение chin-smoker » 03 мар 2014, 19:41

Кробывал как 9 ю версию, которая не поддерживается, так и 8 ю которая поддерживается. Результат одинаковый.

merkushov
OTRS Бывалый
Сообщения: 310
Зарегистрирован: 25 окт 2012, 15:06
Откуда: Воронеж
Поблагодарили: 2 раза

Re: Кодировка в названиях вложений через IE

Сообщение merkushov » 04 мар 2014, 12:19

Сталкивался недавно. Проблема в том, что спецификации HTTP протокола развиваются, а браузеры продолжают их интерпретировать каждый по своему. Путаницы добавляют последние версии IE, мимикрирующие под браузер Mozilla записью в UserAgent

Вот код исправляющий ошибку

Код: Выделить всё

diff --git a/Kernel/Output/HTML/Layout.pm b/Kernel/Output/HTML/Layout.pm
index 4b88fc8..997c57f 100644
--- a/Kernel/Output/HTML/Layout.pm
+++ b/Kernel/Output/HTML/Layout.pm
@@ -2475,6 +2475,8 @@ returns browser output to display/download a attachment
 sub Attachment {
     my ( $Self, %Param ) = @_;

+    $Param{Charset} ||= 'utf-8';
+
     # check needed params
     for (qw(Content ContentType)) {
         if ( !defined $Param{$_} ) {
@@ -2516,7 +2518,12 @@ sub Attachment {

         # only deliver filename if needed
         if ($FilenameInHeader) {
-            $Output .= " filename=\"$Param{Filename}\"";
+            if ( $Self->{Browser} eq 'MSIE' && ( $Self->{BrowserMajorVersion} == 7 || $Self->{BrowserMajorVersion} == 8 ) ) {
+                $Output .= " filename=" . $Self->LinkEncode($Param{Filename}).';';
+            } else {
+                $Output .= " filename=\"$Param{Filename}\";";
+                $Output .= " filename*=UTF-8''" . $Self->LinkEncode($Param{Filename}).';';
+            }
         }
     }
Заодно, вот ещё кусок, который для Windows помогает в случае битой кодировки в скачиваемых из OTRS csv файлах

Код: Выделить всё

diff --git a/Kernel/Output/HTML/Layout.pm b/Kernel/Output/HTML/Layout.pm
index 4b88fc8..4aefa29 100644
--- a/Kernel/Output/HTML/Layout.pm
+++ b/Kernel/Output/HTML/Layout.pm
@@ -2545,6 +2545,10 @@ sub Attachment {

     # fix for firefox HEAD problem
     if ( !$ENV{REQUEST_METHOD} || $ENV{REQUEST_METHOD} ne 'HEAD' ) {
+        # UTF-8 BOM
+        if ( $Self->{UserCharset} =~ m/utf-8|utf8/i && $Param{ContentType} =~ m/text\// ) {
+            $Output .= "\xEF\xBB\xBF";
+        }
         $Output .= $Param{Content};
     }
Меркушов Виктор, perl программист

chin-smoker
OTRS Новобранец
Сообщения: 12
Зарегистрирован: 11 дек 2013, 16:24

Re: Кодировка в названиях вложений через IE

Сообщение chin-smoker » 04 мар 2014, 13:30

Виктор, это гениально!
Большое спасибо. :)
Решение в секции only deliver filename if needed решило проблему с именами аттачей. Собственно то что требовалось.
Попробовал в нести изменения в секцию fix for firefox HEAD problem, но к сожалению появляется ошибка AJAX, но в любом случае Ваше решение очень помогло. Еще раз спасибо. :)

Ответить