|
|
|
| Всем здрасти. Есть задача, над которой устал биться - всё, что приходило на ум перепробовал.
Есть сервер на Win XP в локальной сети, на нём сайт с каталогом музыки. Записи в БД добавляются путём парсинга плейлиста AIMP который имеет след. формат:
...
1|F:\Музыка\Enya\1995 - The Memory of Trees\10. Enya - La soñadora.flac|Enya|The Memory of Trees|New Age|La soñadora|218240|17508989|10|1995|44100|637|2
1|F:\Музыка\Mylène Farmer\1999 - Innamoramento\09. Mylène Farmer - Serais-tu l[b]]à[/b_.flac|Mylène Farmer|Innamoramento|Pop|Serais-tu là?|287906|35475404|9|1999|44100|976|2
...
|
В принципе это избавляет от многих проблем (работает быстрее, чем перебирать папки/файлы + php пока не может обрабатывать lossless, и от mp3 нельзя добиться такой подробной информации).
Но есть проблема - плейлист сохраняется в формате ucs-2, и напрямую файлы найти нельзя (file_exists возвращает false), преобразуя в utf-8 тоже самое, а если в cp1251 то символы ñ, è и т.д. пропадают, т.е. снова file_exists -- false, но при этом остальные файлы добавляются без проблем. Вот собственно проблема - на диске эти файлы именно так и названы, с этими символами, как заставить парсер их найти? | |
|
|
|
|
|
|
|
для: Gerych
(09.01.2010 в 15:42)
| | можно попробовать, преобразовать символы в строке для поиска к одному формату.
попробуйте, поковырять
html_entity_decode()
и
htmlentities() | |
|
|
|
|
|
|
|
для: Gerych
(09.01.2010 в 15:42)
| | Пардон, тут форум преобразовал не так - вместо ñ и т.п. должно быть n- c тильдой сверху, e- с ковычкой сверху и т.д. ñ htmlentities() пробовал - ессесно не получилось, т.к. путь до файла изменился на несуществующий | |
|
|
|
|
|
|
|
для: Gerych
(09.01.2010 в 15:42)
| | >Но есть проблема - плейлист сохраняется в формате ucs-2,
не может. Файл состоит из октетов. Так что либо в UTF-16LE (что вероятнее) либо в UTF-16BE.
>и напрямую файлы найти нельзя
Что есть напрямую?
Может нужно просто iconv применить в целевую кодировку? | |
|
|
|
|
 375.8 Кб |
|
|
для: Trianon
(09.01.2010 в 16:56)
| | Попробую объяснить по порядку
private function add_audio(){
$this->playlist = iconv("utf-8", "cp1251", playlist); //Без этого скрипт не найдёт плейлист, т.к. сам скрипт utf-8
/*ну тут всё понятно
$this->play_list_open = fopen($this->playlist, "r");
$this->play_list_read = fread($this->play_list_open, filesize($this->playlist));
fclose($this->play_list_open);
*/
$this->play_list_read = iconv("UCS-2", "cp1251//ignore", $this->play_list_read); //А вот без этого дальше работать невозможно, т.к. проверка на существование файла будет возвращать false
$this->strings = explode("\r\n", $this->play_list_read);
for ($this->string = 1; $this->string < count($this->strings); $this->string++){
/*Разбиение информации о песне на составляющие*/
$this->song = explode("|", $this->strings[$this->string]);
if (isset($this->song[1]) && file_exists($this->song[1])){ //Это на случай, если файл был удалён или его переместили, но забыли обновить плейлист
|
Также далее идёт получение хэш-суммы файла (для дальнейшего обновления информации о файле, в случае изменения тэгов) - и тут также вылетает ошибка если не переводить в cp1251.
И по поводу кодировки плейлиста в аттаче | |
|
|
|
|
|
|
|
для: Gerych
(09.01.2010 в 17:17)
| | К самим файлам-то можно обратиться по имени в однобайтовой кодировке?
Вы в консоли можете сделать dir "такой файл" и получить отклик?
В 1251 - сомнительно мне как-то. Может попробовать локаль поменять?
А что аттач... аттач лишь подтверждает... | |
|
|
|
|
|
|
|
для: Trianon
(09.01.2010 в 17:44)
| | Да, ко всем у которых нет этих символов | |
|
|
|
|
|
|
|
для: Gerych
(09.01.2010 в 15:42)
| | Вообщем после долгих мытарств нашел ответ на свой вопрос, и похоже решения пока нет :(
http://bugs.php.net/bug.php?id=43148 | |
|
|
|