Адаптивный файловый менеджер v9, загружающий проблему имени файла на арабском языке

Сейчас я использую http://www.responsivefilemanager.com/ в качестве плагина tinymce, версия tinymce 4.7.4, версия PHP 5.5. Проблема, которую я пытался исправить, - проблема с именами в загруженных арабских файлах. RFM не загружает файлы с арабскими именами и правильными именами.

Имена изображений, которые я выбираю для тестирования, - это "vvv", "اختبار", "اختبار - Copy". Все они - "jpg", после того как я загружаю файлы, у которых есть арабские имена, они дают результат, подобный следующему:

اختبار. Jpg ===> ط§ط®طھط¨ط§ط±. Jpg

اختبار - Copy.jpg ==> ط§ط®طھط¨ط§ط ± - Copy.jpg

однако в config.php это функция mb_internal_encoding - это UTF-8.

Я попытался использовать iconv путем преобразования между utf-8 в cp1256 в строке 1097 UploadHandler.php следующим образом:

move_uploaded_file($uploaded_file, iconv("utf-8", "cp1256",$file_path));

вместо

move_uploaded_file($uploaded_file, $file_path);

и это позволило загружать файлы с их арабскими именами, но они появились в браузере RFM с?????? а также????? - Копируйте и не просматривайте изображения в браузере, однако в папке большого пальца были изображения, а изображение اختبار. Jpg загружалось неправильно и делало его плохим. только английские имена файлов работают нормально.

Я работал во всех файлах php и использовал base64_encode, и я попытался изменить кодировку в config.php, но ничего не получалось.

У кого-нибудь есть идеи, чтобы это исправить?

2 ответа

Причина, по которой вы получаете "?????? и?????" потому что вы должны изменить набор сбора вашей базы данных, который может быть UTF8 General CI и затем сохранить имя файла (без iconv()) и переместите файл с именем_файла с помощью iconv()

Вы не хотите связываться с UploadHandler.php, Вся предварительная обработка загрузки происходит в upload.phpв том числе массируя имя файла в функции fix_filename в utils.php, К тому времени как UploadHandlerимя файла уже было изменено iconv и друзья не будут работать. Взгляните на fix_filename и попробуйте манипулировать строкой там:

/**
* Cleanup filename
*
* @param  string  $str
* @param  bool    $transliteration
* @param  bool    $convert_spaces
* @param  string  $replace_with
* @param  bool    $is_folder
*
* @return string
*/
function fix_filename($str, $config, $is_folder = false)
{
    if ($config['convert_spaces'])
    {
        $str = str_replace(' ', $config['replace_with'], $str);
    }

    if ($config['transliteration'])
    {
        if (!mb_detect_encoding($str, 'UTF-8', true))
        {
            $str = utf8_encode($str);
        }
        if (function_exists('transliterator_transliterate'))
        {
            $str = transliterator_transliterate('Any-Latin; Latin-ASCII', $str);
        }
        else
        {
            $str = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $str);
        }

        $str = preg_replace("/[^a-zA-Z0-9\.\[\]_| -]/", '', $str);
    }

    $str = str_replace(array( '"', "'", "/", "\\" ), "", $str);
    $str = strip_tags($str);

    // Empty or incorrectly transliterated filename.
    // Here is a point: a good file UNKNOWN_LANGUAGE.jpg could become .jpg in previous code.
    // So we add that default 'file' name to fix that issue.
    if (strpos($str, '.') === 0 && $is_folder === false)
    {
        $str = 'file' . $str;
    }

    return trim($str);
}
Другие вопросы по тегам