Задача: есть архив mp3 файлов, нужно создать такое же количество материалов типа AUDIO при помощи модуля AUDIO.
С вставкой файлов с русскими исполнителями встречаемся с с несколькими проблемами..
Проблема №1: При импортировании файла с русскоязычным названием пишет ошибки..
Решение:В файле audio.module перед каждым INSERT которым вставляется файл в базу пишем:
$f = $node->audio_file;
$f['file_name'] =mb_convert_encoding ( $f['file_name'] , 'UTF-8' , 'Cp-1251');
$f['file_path1']= $f['file_path'];
$f['file_path'] =mb_convert_encoding ( $f['file_path'] , 'UTF-8' , 'Cp-1251');
тоесть конвертим путь файла и имя файла в кодировку UTF-8, т.к. вся друпальская база у нас в кодировке UTF-8
Далее в этом же модуле , после каждого SELECT который возвращает имя файла или его путь
переводим путь обратно в cp1251 , я делаю это так:
$fields = db_fetch_array(db_query("SELECT * FROM {audio} WHERE vid=%d", $node->vid));
$fields['file_name'] =mb_convert_encoding ( $fields['file_name'] , 'Cp-1251' , 'UTF-8');
$fields['file_path'] =mb_convert_encoding ( $fields['file_path'] , 'Cp-1251' , 'UTF-8');
Проблема №2: Русско-буквенные тэги id3v1 mp3 отображаются не верно
Решение:
В файле getid3.php ищем строчку
'id3v1' => array('id3v1' , $this->encoding_id3v1),
и меняем ее на
'id3v1' => array('id3v1' , 'cp1251'),
и все.
Проблема №3: Русско-буквенные тэги id3v2 mp3 отображаются не верно
Решение:
в модуле module.tag.id3v2.php
ищем строчку
static $TextEncodingNameLookup = array(0=>'ISO-8859-1', 1=>'UTF-16', 2=>'UTF-16BE', 3=>'UTF-8', 255=>'UTF-16BE');
меняем ее на
static $TextEncodingNameLookup = array(0=>'сp1251', 1=>'UTF-16', 2=>'UTF-16BE', 3=>'UTF-8', 255=>'UTF-16BE');
и все.
возможны еще проблемы, но они уже более мелкие.. если что пишите разберемся...
ЗЫ я не описал как можно исправить форму для импорта .. там тоже косяк с кодировкой в путях... ну там по аналогии..
ЗЗЫ если нада могу описать как копировать файлы в определенные папки, что бы архив аплоадных фалов тоже был каталогизирован .... ну там в принципе просто..
Комментарии
я отказался от модуля Audio. не гибкий он. Пользуйтесь ССК. Это гибко как угодно.
за теги - СПАСИБО! Работает! Только у меня в файле не было вашего кода. Я просто добавил : 'cp1251' сюда: // Check encoding/iconv support
У меня установлена getid3 версии 1.7.8b3.
возможно у вас 1.7.7 поэтому код различаются