Для работы с id3 тэгами есть замечательная библиотека getid3 . Примеры есть на фо. сайте, я же опишу проблему с которой пришлось столкнуться.
Как обычно бывает с иноязычными скриптами. проблема возникла с русскими символами. При записи в формате id3v1 получались либо кракозябры вместо русских символов либо они вообще не записывались. При этом в id3v2 кириллица сохранялась нормально.
Пример кода из документации.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
include_once(_d.'/getid3/getid3.php'); $TaggingFormat = 'UTF-8'; $getID3 = new getID3; $getID3->setOption(array('encoding'=>$TaggingFormat)); // Initialize getID3 tag-writing module include_once(_d.'/getid3/write.php'); $tagwriter = new getid3_writetags; $tagwriter->filename = $sf; $tagwriter->tagformats = array('id3v1', 'id3v2.3'); // set various options (optional) $tagwriter->overwrite_tags = true; //$tagwriter->tag_encoding = $TaggingFormat; $tagwriter->remove_other_tags = false; // populate data array $TagData['title'][] = 'Название трека'; $tagwriter->tag_data = $TagData; // write tags $tagwriter->WriteTags() ; |
После экспериментов выяснил, что кириллицу в id3v1 нужно записывать в кодировке cp1251. Красивого решения не придумал, пришлось править саму библиотеку. Ищем файл /getid3/write.php
Ищем строку из примера ниже и меняем ISO-8859-1 на cp1251.
1 |
$tag_data_id3v1['title'] = getid3_lib::iconv_fallback($this->tag_encoding, 'ISO-8859-1', implode(' ', (isset($this->tag_data['TITLE'] ) ? $this->tag_data['TITLE'] : array()))); |
Свежие комментарии