Скрипт не распознает кириллицу

First

Новичок
Кодировка должна совпадать!

Для того, чтобы поменять кодировку текста, мало заголовок объявить. Надо и сами буковки конвертировать.
Провел вот такой эксперимент, взял первоначальный вариант скрипта ( когда еще iconv() не прописывал), на сервере выставил кодировку windows-1251, в заголовке тоже windows-1251, в итоге кириллицу скрипт без iconv() стал распознавать, но вот с кириллицей в url незадача, моя проблема кажется в обработке GET-запроса
$dir = rawurldecode($_GET['dir']);
как понимаю что $_GET уже содержит в себе декодированные строки
вот что на выходе имеем:
Код:
<channel>
<title><![CDATA[Матрица]]></title>
<playlist_url><![CDATA[http://nstreamvod/browse.php?dir=%CC%E0%F2%F0%E8%F6%E0]]></playlist_url>
<logo_30x30><![CDATA[open.png]]></logo_30x30>
<description><![CDATA[Матрица]]></description>
</channel>
Хотел бы узнать так как ниже делаь можно?
вместо
$dir = rawurldecode($_GET['dir']);
записать
$dir = rawurldecode(iconv("CP1251","UTF-8",$_GET['dir']));
 
Последнее редактирование:

С.

Продвинутый новичок
$dir = rawurldecode($_GET['dir']);
не может выдавать
http://nstreamvod/browse.php?dir=%CC%E0%F2%F0%E8%F6%E0
если только ты сам не портачил.

Код:
$dir = rawurldecode(iconv("CP1251","UTF-8",$_GET['dir']));
Если ты все привел к единой кодировке windows-1251, то зачем здесь опять вылезает UTF-8?
 

antson

Новичок
Партнер клуба
Не видел исходный код nStreamVod и не могу судить на сколько он дружит с кирилицей (сталкивался только с плугинами XBMC),
но думаю, что он возможно написан по принципу у меня заработало ну и фиг с ним.

Поэтому я бы немного усложнил систему введя еще скрипт get.php,
для того,чтобы избежать совсем русских букв в именах файлов.

В хмл в качестве источника stream_url указываем
http://nstreamvod/myportal/get.php?need=base64_encode(имя_файла)

А скрипт get.php делает уже обратное преобразование в имя файла и дает указание для
nginx, что нужно отдать приставке файл.
Для этого достаточно сформировать заголовок
header('X-Accel-Redirect: ' . $file);
и нужный тип контента.

Пример 3б http://habrahabr.ru/post/151795/
 

First

Новичок
Все никак не могу
Не видел исходный код nStreamVod и не могу судить на сколько он дружит с кирилицей
Для спутникового ресивера на Enigma2 Плагин просто замечательный, с кириллицей дружит на ура, а тестирую я скрипт в Google Chrome,
разницы никакой нет, одинаково все отображается. Как уже писал выше кириллицфайлы на кириллице находящиеся в папках на латинице воспроизводятся,
а вот в папку на кириллице попасть не получается, выдается ошибка
Код:
<items>
<playlist_name>
<![CDATA[ Bad path: D:/OpenServer/domains/nstreamvod/myportal/localhost/Музыка/ ]]>
</playlist_name>
</items>
или если убрать вывод в xml
Код:
<?xml version="1.0" encoding="UTF-8" ?>
<items>
    <playlist_name><![CDATA[D:/OpenServer/domains/nstreamvod/myportal/localhost/Музыка/]]></playlist_name>
<br />
<b>Warning</b>:  scandir(D:/OpenServer/domains/nstreamvod/myportal/localhost/Музыка/,D:/OpenServer/domains/nstreamvod/myportal/localhost/Музыка/) [<a href='function.scandir'>function.scandir</a>]:
Если же тупо в браузере Google Chrome вбить адрес что должен создать скрипт
http://nstreamvod/myportal/localhost/Музыка/Триада - Свет Не Горит.mp4
то видео воспроизводится на ура, если кто знает как победить ошибку
Код:
 [<a href='function.scandir'>function.scandir</a>]
прошу подсказать, код скрипта лежит тут: https://gist.github.com/anonymous/416a30cb299b0da14414
 
Последнее редактирование:

First

Новичок
Нашел я причину, строка 105 имела вид
Код:
echo "    <playlist_name><![CDATA[$basedir$dir]]></playlist_name>\r\n";
записал через iconv
Код:
echo iconv("windows-1251","utf-8", "    <playlist_name><![CDATA[$basedir$dir]]></playlist_name>\r\n");
и скрипт стал на ура понимать url вида
Код:
http://nstreamvod/browse.php?dir=Новая папка
Но только если я вставляю адрес в адресную строку браузера Internet Explorer, если же вставлять в
Google Chrome то вместо списка файлов вылетает как и раньше
Код:
<items>
<playlist_name>
<![CDATA[ Bad path: D:/nstreamvod/myportal/localhost/Новая папка/ ]]>
</playlist_name>
</items>
браузер приставки тоже не может войти в папку, что можно сделать чтобы Google Chrome и браузер приставки также свободно входили в папку как и браузер Internet Explorer ?
Полагаю причина в том что браузеры при отправке запроса по разному кодируют url с кириллицей.
Поглядел на кодировку в браузерах, у Google Chrome стоит Unicode(UTF-8), а в Internet Explorer просто Unicode, как понимаю в этом и есть разница.
Вопрос - может так можно решить задачу: через iconv пришедший запрос в Unicode(UTF-8) перекодировать в Unicode ?
 
Последнее редактирование:

michelle

Новичок
Поставь сразу после Новая обратный слеш - Новая\ папка - может дело в этом?
 

First

Новичок
Поставь сразу после Новая обратный слеш - Новая\ папка - может дело в этом?
не помогло, вот что выдается:
Bad path: D:/nstreamvod/myportal/localhost/Новая папка\/
Еще пробовал в Google Chrome выставлять различные кодировки, толку то же ноль
 

michelle

Новичок
Новая\ папка - обратный слеш надо ставить ТОЛЬКО если в названии каталога есть пробелы - это экран для символа "пробел"!

И самое главное правило - НЕ ИСПОЛЬЗОВАТЬ в названиях каталогов и файлов кирилицу и пробелы!
 

First

Новичок
И самое главное правило - НЕ ИСПОЛЬЗОВАТЬ в названиях каталогов и файлов кирилицу и пробелы!
на то они и правила чтобы их нарушать )))
погуглин немного и кое что понял, вот что передает Google Chrome при вводе в адресную строку
Код:
http://nstreamvod/browse.php?dir=Новая папка
Код:
http://nstreamvod/browse.php?dir=%D0%9D%D0%BE%D0%B2%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0
то есть Google Chrome кириллицу кодирует в UTF-8
а Internet Explorer по другому кодирует, в этом и вся фишка, если запрос из UTF-8 перекодировать на ту кодировку в какой его отдает Internet Explorer то проблему думаю можно решить
вот как бы точно узнать в какой кодировке Internet Explorer кодирует кириллицу ?
 

AnrDaemon

Продвинутый новичок
Поставь сразу после Новая обратный слеш - Новая\ папка - может дело в этом?
Неверно.
на то они и правила чтобы их нарушать )))
погуглин немного и кое что понял, вот что передает Google Chrome при вводе в адресную строку
Код:
http://nstreamvod/browse.php?dir=Новая папка
Код:
http://nstreamvod/browse.php?dir=%D0%9D%D0%BE%D0%B2%D0%B0%D1%8F%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0
то есть Google Chrome кириллицу кодирует в UTF-8
а Internet Explorer по другому кодирует, в этом и вся фишка, если запрос из UTF-8 перекодировать на ту кодировку в какой его отдает Internet Explorer то проблему думаю можно решить
вот как бы точно узнать в какой кодировке Internet Explorer кодирует кириллицу ?
Не надо ничего узнавать. Надо правильно кодировать адреса.
http://tools.ietf.org/html/rfc3986#section-2
http://php.net/rawurlencode
 

First

Новичок
Неверно.

Не надо ничего узнавать. Надо правильно кодировать адреса.
http://tools.ietf.org/html/rfc3986#section-2
http://php.net/rawurlencode
Пробовал rawurlencode, еще пару дней назад, толку не было, да и тут
http://habrahabr.ru/post/17640/
написано что $_GET работает так, что он понимает escape-последовательности, поэтому надобности в rawurlencode при GET запросе нет никакой

Не грабли нас ищут - а мы сами радостно на них прыгаем!
Ну что-ж - удачи!
Я прекрасно понимаю что сервер под виндой и папки и файлы на кириллице это нечто, но иных вариантов у меня не было, какая есть файлопомойка из двух дисков по 3 Тб такую и решил раздавать по сети,
проблему свою я поборол, поскольку Google Chrome кириллицу кодирует в UTF-8, то сделал обратную перекодировку из UTF-8 в windows-1251, записав строчку 69 следующим образом:
Код:
$dir =  iconv("utf-8","windows-1251",($dir . '/'));
и все пошло как лом по маслу )))
Большое спасибо всем кто натолкнул меня на решение моей задачи!!! :)
 
Последнее редактирование:
Сверху