Загрузка файлов с русским наименованием

Тема в разделе "Предложения и пожелания", создана пользователем DiMoss, 18 май 2017.

  1. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    862
    Симпатии:
    236
    Не могу сказать, что это ошибка, но скорей всего можно обозвать это недоработкой - файлы с русским наименованием загружаются без самого наименования. Получается что то типа .doc / .jpg. Соответственно файлы скачиваются без расширения, т.к. оно становится наименованием. Я веду речь в контексте загрузки файлов на сервер клиентами. Если вести речь о загрузке из админки, то админ должен осознавать, что именование на кириллице недопустимо, ну или крайне нежелательно.
    Клиентам же допустимо этого не знать.
    Решение вполне себе тривиальное - транслитерация. Открываем файл catalog/controller/tool/upload.php:

    1)
    после скобки, закрывающей function index(), вставляем новый метод
    PHP:
          public function translitText($str) {
            
    $tr = array(
                
    "А"=>"A","Б"=>"B","В"=>"V","Г"=>"G",
                
    "Д"=>"D","Е"=>"E","Ё"=>"E","Ж"=>"J","З"=>"Z","И"=>"I",
                
    "Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N",
                
    "О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T",
                
    "У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
                
    "Ш"=>"SH","Щ"=>"SCH","Ъ"=>"","Ы"=>"YI","Ь"=>"",
                
    "Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b",
                
    "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ё"=>"e","ж"=>"j",
                
    "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
                
    "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
                
    "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
                
    "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
                
    "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya"
            
    );

            return 
    strtr($str,$tr);
        }
    2) перед строкой
    PHP:
    $filename basename(preg_replace('/[^a-zA-Z0-9\.\-\s+]/'''html_entity_decode($this->request->files['file']['name'], ENT_QUOTES'UTF-8'))); 
    вставляем
    PHP:
    $translit_name $this->translitText($this->request->files['file']['name']);
    и зменяем
    PHP:
    $filename basename(preg_replace('/[^a-zA-Z0-9\.\-\s+]/'''html_entity_decode($this->request->files['file']['name'], ENT_QUOTES'UTF-8'))); 
    на
    PHP:
    $filename basename(preg_replace('/[^a-zA-Z0-9\.\-\s+]/'''html_entity_decode($translit_nameENT_QUOTES'UTF-8'))); 
     
    Последнее редактирование: 22 май 2017
    karpov, Romans и Vlad нравится это.
  2. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    Это в пожелания надо писать )) По сути вы правы. Для админки тоже нужно сделать, я писал @Romans както, сказал что в след обновлении, rs6 добавит. Значит и это тоже добавит ;)
     
  3. Romans

    Romans Administrator Команда форума

    Сообщения:
    1.434
    Симпатии:
    780
    Добавлено в rs6
     
    karpov нравится это.