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

First

Новичок
Всем привет!
Есть маленькая проблема, суть следующая:
На Windows XP SP3 запущены nginx 1.7 + PHP 5.3
Данную связку использую как домашний медиа-сервер для просмотра скачанного с торрентов видео на спутниковом ресивере VU+ c установленным плагином nStreamVod , в расшаренной папке на компе лежит скрипт browse.php который генерирует XML плей-лист для nStreamVod, при помощи данного скрипта можно как в файловом менеджере гулять по папкам и открывать файлы и папки. Все работает на ура, пока в папке не появляется файл на кириллице, от кириллических символов скрипт падает, и выдается ошибка:
This page contains the following errors:
Below is a rendering of the page up to the first error.

поскольку с PHP только начал дружить, опыта и знаний еще не имею, поэтому прошу помочь подправить скрипт так чтобы он понимал кириллицу
 

Вложения

First

Новичок
Пробовал решить проблему так:
в 54 строке вместо
Header("Content-Type: text/xml");
прописал
Header("Content-Type: text/html; charset=utf-8");
скрипт падать перестал, но вместо кириллицы при открытии в браузере выдает что то с чем то:

<channel>
<title><![CDATA[������ �����.mp4]]></title>
<stream_url><![CDATA[http://nstreamvod/myportal/localhost/%D0%E8%F7%E0%F0%E4%20%E4%FE%F0%E0%ED.mp4]]></stream_url>
<logo_30x30><![CDATA[video.png]]></logo_30x30>
<description><![CDATA[������ �����.mp4<br><br>Size: 34.28 MB<br>Date: April 19 2015, 01:57:39]]></description>
</channel>
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
Это потому что кодировка неправильно указана.
 

First

Новичок
Подскажите какую кодировку указать ?
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
Правильную. Какую именно? Вам лучше знать. Ваш код, ваши файлы.
 

First

Новичок
Правильную. Какую именно? Вам лучше знать. Ваш код, ваши файлы.
Поскольку сервер поднят на обычной винде, то ничего необычного в кодировке файлов и папок нет, все стандартно, кодировка windows-1251,
прописывал
Header("Content-Type: text/html; charset=windows-1251");
результат тот же.
 

Shasoft

Новичок
Вы сохраните страницу и попробуйте определить её кодировку какой-нибудь тулзой. В вашем файле php скрипта русских букв вообще нет, так что по нему кодировку не определишь.
 

Фанат

oncle terrible
Команда форума
Первое и самое главное: кодировку надо писать не от балды, а только ту, в которой находятся актуальные данные.
Оттого, что ты укажешь другую кодировку, данные сами по себе не перекодируются.

Второе. Кодировка XML задается в заголовке файла, а не НТТР ответа. Вот, в твоем же скрипте пишется
Код:
echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n<items>\r\n";
Поэтому, сначала пробуем здесь написать windows-1251 вместо UTF-8. В хидере тоже на всякий случай оставить.

Если не моможет - тогда придется конвертировать сами исходные данные, через iconv()
 

AnrDaemon

Продвинутый новичок
Скорее всего, придётся конвертировать в любом случае.
Вряд ли тупая железка понимает что-то кроме UTF-8.
 

WMix

герр M:)ller
Партнер клуба
Код:
http://nstreamvod/myportal/localhost/%D0%E8%F7%E0%F0%E4%20%E4%FE%F0%E0%ED.mp4
а может все правильно, я чтот тоже не могу это раскодировать, у меня первая буква 한글

а нет получилось "Ричард дюрад" win-1251

ну и муть...
 
Последнее редактирование:

First

Новичок
у меня совсем другое )))

придется конвертировать сами исходные данные, через iconv()
вы правы, без iconv не обойтись, вот в скрипт что ниже вставил кракозябры
Код:
<?php
header('Content-Type: text/html; charset=utf-8');
$str = rawurldecode('%D0%E8%F7%E0%F0%E4%20%E4%FE%F0%E0%ED.mp4');
echo iconv("windows-1251","utf-8", $str);
?>
и на выходе получил
Ричард дюран.mp4

только как iconv прикрутить к моему скрипту не знаю, опыта нет никакого :(
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
Найните с простого - выясните, в какой кодировке у вас входные данные.
 

fixxxer

К.О.
Партнер клуба
только как iconv прикрутить к моему скрипту не знаю, опыта нет никакого :(
Ровно так же, как ты только что сделал, только там, где подставляются строки, которые у тебя в 1251.

Если бы выложил код на тот же github (если один файл - проще на github gist), можно было бы ткнуть в строчку, качать зип влом
 

AnrDaemon

Продвинутый новичок
Почему scandir()? Почему не сразу directory iterator? Зачем делать дурную работу?
А вообще, смотрите, какая кодировка вам возвращается в scandir().
 

First

Новичок
В общем поборол я свою проблему!!!!!
Большое спасибо Фанат и fixxxer за наводки!!!!!!!!
третий день с php дружу, может коряво сделал, не по правилам, но главное что работает!!!!

было:

echo " <stream_url><![CDATA[$baseurlpatch$dir$en_entry]]></stream_url>\r\n";

стало

$str = rawurldecode($en_entry);
echo iconv("windows-1251","utf-8", " <stream_url><![CDATA[$baseurlpatch$dir$str]]></stream_url>\r\n") ;
 
Последнее редактирование:

First

Новичок
О общем с небольшими корректировками все работает как и было задумано автором скрипта теперь и на винде, есть еще один вопрос к спецам - если во вложенных папках попадается папка на кириллице, то скрипт доходит до нее, в браузере ее название отображается, но вот войти в нее не получается, названия папок на сервере на кириллице конечно анахронизм, люди советуют этого никогда не делать, но все же может есть какой способ, через тот же iconv ?
Вот к примеру какую ссылку рисует скрипт при попытке войти в папку с названием Марица
Код:
<playlist_url><![CDATA[http://nstreamvod/browse.php?dir=Матрица]]></playlist_url>
Вбиваю в браузер
http://nstreamvod/browse.php?dir=Матрица
и скрипт выдает это:
Код:
<?xml version="1.0" encoding="UTF-8" ?>

<items>
<br />
<b>Deprecated</b>:  Function split() is deprecated in <b>D:\nstreamvod\browse.php</b> on line <b>69</b><br />
    <playlist_name><![CDATA[Bad path: D:/nstreamvod/myportal/localhost/Матрица/]]></playlist_name>
</items>
Проблемная 69 строка которая имеет вид
Код:
$dirnames = split('/', $dir);
iconv для решения проблемы может помочь или надо что то другое использовать ?
 
Последнее редактирование:

First

Новичок
Спасибо за совет, заменил в 69 строке split на explode и сообщение об ошибке Function split() is deprecated in исчезло, но цели не достиг, папки на латинице все так же открываются,
а на кириллице ни в какую, вместо плейлиста скрипт ругается и выдает ошибку Bad path
Код:
<?xml version="1.0" encoding="UTF-8" ?>

<items>
    <playlist_name><![CDATA[Bad path: D:/nstreamvod/myportal/localhost/Матрица/]]></playlist_name>
</items>
а должно быть примерно так:
Код:
<?xml version="1.0" encoding="UTF-8" ?>

<items>
    <playlist_name><![CDATA[D:/nstreamvod/myportal/localhost/Matrix/]]></playlist_name>
    <channel>
        <title><![CDATA[МакSим - Ветром стать.mp4]]></title>
        <stream_url><![CDATA[http://nstreamvod/myportal/localhost/Matrix/МакSим - Ветром стать.mp4]]></stream_url>
        <logo_30x30><![CDATA[video.png]]></logo_30x30>
        <description><![CDATA[МакSим - Ветром стать.mp4<br><br>Size:  58.18 MB<br>Date:  April 21 2015, 23:38:02]]></description>
    </channel>
<prev_page_url text="Назад"><![CDATA[http://nstreamvod/myportal/myportal.xml]]></prev_page_url>
</items>


но если в браузере вставить D:/nstreamvod/myportal/localhost/Матрица/ то ссылка открывается и вываливаются все вложенные файлы и папки,
что еще надо поменять не могу понять, если есть какие у кого мысли прошу подсказать как можно решить мою проблему,
текущий код здесь: https://gist.github.com/anonymous/934f36cf59950915fa7b
 
Сверху