Aeva Media и русские имена файлов

Автор alex495, 10 марта 2013, 01:25:58

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

alex495

Приветствую!
проблема есть на локальном денвере под виндовс и индентична на живом хоcтинге под freebsd с локалью 1251
Да, понимаю что использование русских имен не хорошо, тем не менее хочется :)
Но есть проблемка - файлы добавляются по разному, а от этого зависит скачивание
(1) Загрузка файла(одного) а так же импорт с папки FTP работает с кодировкой имени в 1251
(2) Множественная загрузка же отчего то работает с кодировкой UTF8, и на это действует пункт в настройках об обработке UTF
И так и так все работает, но при попытке скачать файл в первом случае придет одно расширение т е русские символы просто исчезнут
файлы от множественной загрузки скачиваются правильно, русские.

В попытке разобраться и поправить сие безобразие наковырял следующее:
1. сохранение файла на диске: сохраненный файл имеет хитрое, зашифрованное имя, которое тем не менее содержит имя
В случае (1) оно изначально безобразное, но оказалось это из-за конвертации непечатных символов
Русский мне там сделать не получилось, а вот реализовать транслитерацию - легко
Для этого в Aeva-Subs-Vital.php находим функцию aeva_getEncryptedFilename и правим 2 строчки, типа так:
$clean_name = strtr($name, 'ЉЋљћџАБВГДЕЗИЙКЛМНОПРСТУФХЦЫабвгдезийклмнопрстуфхцы', 'SZszYABVGDEZIJKLMNOPRSTUFHCYabvgdezijklmnoprstufhcy');
$clean_name = strtr($clean_name, array('µ' => 'u', 'њ' => 'oe', 'Њ' => 'OE', 'я' => 'ya', 'Я' => 'YA', 'ш' => 'sh', 'Ш' => 'SH', 'ю' => 'yu', 'Ю' => 'YU', 'щ' => 'shc', 'Щ' => 'SHC', 'э' => 'e`', 'Э' => 'E`', 'Ь' => '`', 'ъ' => '`', 'Ъ' => '`' ));

толку от этого никакого, кроме чисто визуального, продолжим
В случае же (2а) имя файла будет зашифровано чисто цифрами(кодами UTF) в случае включенной конвертации и неким подобием UTF при отключенной(2б)
2. база данных(работает в 1251):
В (1) случае в таблице smf_aeva_files поле  filename заполняется нормальным именем "как есть"
при (2а) и если включена конвертация там заполняется кодом вида "#1034#1077"
А если конвертация выключена(2б) то "РљРѕР·Р»" - похоже чистый  UTF
3. Что интересно, на странице с клипом, поле"название файла" отображается неправильно только с (2б) (с отключенной конвертаций), там "РљРѕР·Р»"

Что выявил:
если в Aeva-Gallery.php в разделе aeva_getMedia коде
$filename = aeva_entities2utf($filename);


// Stupid Safari doesn't support UTF-8 filenames...
if ($context['browser']['is_safari'] && !$is_chrome)
$filename = utf8_decode($filename);

отключить aeva_entities2utf или utf8_decode (закоментировать) то начинают нормально скачиваться файлы (1), но файлы (2а) приходят вида "#1034#1077.mp3". файлы (2б) так же приходят правильно(но поле "название файла" -кадабра)

Я сравнивал функции aeva_mgPost в Aeva-Gallery.php и aeva_multiUpload в Aeva-Gallery2.php
все похоже
пробовал прикручивать отдельные конверторы 1251 в utf в коде - неудачно, по разному вызывать функции entities2utf, utf8_decode и utf2entities или их отключать но без успешно, добивался "????????"
(функции entities2utf и utf2entities искать в конце Aeva-Subs-Vital.php, utf8_decode в Aeva-Embed.php)

Хотелось бы поправить множественную загрузку - тогда и в базе имена нормально отображались бы(в режиме не конвертации)
Возможно решение лежит на поверхности, спецы отзовитесь. Возможно надо поправить пару значений или прикрутить правильный конвертер utf-в-1251 через php