We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 32163
    • 33 Posts
    Коллеги, добрый день.
    Вопрос о решении проблемы, связанной с закачкой файлов с кириллическими символами в названии, несколько раз поднимался на форуме.
    На решение я набрел случайно и спешу поделиться. Суть его сводиться к тому, что в файле FileUpload (/manager/media/browser/mcpuk/connectors/php/Commands/FileUpload.php) нужно дополнить функцию cleanFilename несколькими строками:

    function cleanFilename($filename) {
            $n_filename="";
    
            $trans = array("а"=>"a","б"=>"b","в"=>"v","г"=>"g", "д"=>"d","е"=>"e","ё"=>"yo","ж"=>"j", "з"=>"z","и"=>"i","й"=>"i","к"=>"k", "л"=>"l","м"=>"m","н"=>"n","о"=>"o", "п"=>"p","р"=>"r","с"=>"s","т"=>"t", "у"=>"y","ф"=>"f","х"=>"h","ц"=>"c", "ч"=>"ch","ш"=>"sh","щ"=>"sh","ы"=>"i", "э"=>"e","ю"=>"u","я"=>"ya",
            "А"=>"A","Б"=>"B","В"=>"V","Г"=>"G", "Д"=>"D","Е"=>"E","Ё"=>"Yo","Ж"=>"J", "З"=>"Z","И"=>"I","Й"=>"I","К"=>"K","Л"=>"L", "М"=>"M","Н"=>"N","О"=>"O","П"=>"P","Р"=>"R", "С"=>"S","Т"=>"T","У"=>"Y","Ф"=>"F","Х"=>"H", "Ц"=>"C","Ч"=>"Ch","Ш"=>"Sh","Щ"=>"Sh", "Ы"=>"I","Э"=>"E","Ю"=>"U","Я"=>"Ya",
            "ь"=>"","Ь"=>"","ъ"=>"","Ъ"=>""," "=>"-","№"=>"#");
            $tmp_filename = strtr($filename, $trans);
            $filename = strtolower ($tmp_filename);
            
            //Check that it only contains valid characters
            for($i=0;$i<strlen($filename);$i++) if (in_array(substr($filename,$i,1),$this->fckphp_config)) $n_filename.=substr($filename,$i,1);
            
            //If it got this far all is ok
            return $n_filename;
        }
    


    У меня, по-крайней мере, работает. Только перед тем, как заливать файл на рабочий сервер, пришлось сохранить его в кодировку utf-8.

    UPD. Извините, забыл еще один важный момент. Строки 62 и 63 необходимо поменять на:

    if (isset($_FILES['NewFile'])&&isset($_FILES['NewFile']['name'])&&($_FILES['NewFile']['name']!=""))
              $_FILES['NewFile']['name'] = $this->cleanFilename($_FILES['NewFile']['name']);
    


    UPD. UPD Упс!!! Решение оказывается не единственное. Вот еще один вариант - http://modxcms.com/forums/index.php/topic,18634.msg204965.html#23
      • 20188
      • 4 Posts
      Вот спасибо! Я как раз наткнулся на эту же проблему, думал что придётся делать транслитерацию самому, ан нет - велосипед изобретать не буду smiley Разве что заменю щ на sch, например. Но это уже мелочи.

      Если будут проблемы с использованием этого кода, отпишусь. Кстати есть такое подозрение, что ещё кое-какие символы заменить придётся...
        • 32163
        • 33 Posts
        Quote from: mooncats at Mar 30, 2009, 04:44 PM

        Если будут проблемы с использованием этого кода, отпишусь. Кстати есть такое подозрение, что ещё кое-какие символы заменить придётся...

        А я и не исключал того, что что-то могу упустить. Отпишитесь, как у вас работает