ОсновноеRadiotalkПользовательское
Общие вопросы по интернет радио вещанию
6   •   Посмотреть все темы

Проблемы с кодировкой.

 

7
Hamsterenok @Hamsterenok
Заранее прошу прощения, если подобный вопрос уже был на форуме. Я прочитал много гайдов по данной проблеме, но так ничего мне и не помогло. Проблема в отображение кодировки тегов на сайте. Вместо русских букв - абракадабра.
Софт который используется:
ОС - FreeBSD
Веб-сервер - nginx
Сервер радио - icecast
Клиент для вещания - SAM Broadcaster.
Скрипт для вывода статистики: -
<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" ></head><?php
$ip = "ktkp.mine.nu";
$port = "82";
$ice2_station = "Радио KTKP";

$fp = fsockopen("$ip", $port, &$errno, &$errstr, 30); //open connection
if(!$fp) {
$success=2; //set if no connection



//edit html to fit your stations site, this display is for offline status
echo'<table>
<tr>
<td width="100%" colspan="2">
<img border="0" src="images/offline.gif" width="22" height="22">
<b><font face="Georgia" size="5" color="#FF0000">'.$ice2_station.' сейчас не работает</font></b></td>
</tr>
</table>';
}

if($success!=2){ //if connection
fputs($fp,"GET /status2.xsl HTTP/1.0\r\nUser-Agent: Icecast2 XSL Parser (Mozilla Compatible)\r\n\r\n"); //get status2.xsl
while(!feof($fp)) {
$page .= fgets($fp, 1000);
}
fclose($fp); //close connection
$page = ereg_replace(".*<pre>", "", $page); //extract data
$page = ereg_replace("</pre>.*", ",", $page); //extract data



$numbers = explode(",",$page); //bomb it and extract data
$mount = $numbers[0];
$connections = $numbers[1];
$stream_n = $numbers[2];
$listeners = $numbers[3];
$desc = $numbers[4];
$cur_song = $numbers[5];
$str_url = $numbers[6];
$client_info = $numbers[7];
$test1 = $numbers[8]; //set vars that where empty and still dont know what
$mount = $numbers[11];
$connections = $numbers[12];
$station =$numbers[13];
$listeners = $numbers[14];
$description = $numbers[15];
$cur_song = $numbers[16];
$www_url = $numbers[17];
if (strlen($mount)<2) echo '<table width="100%" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
<tr>
<td width="100%"><b><font face="Arial" size="2">
<tr>
<td width="100%"><b><font face="Georgia" color="green" size="5">
<img border="0" src="images/ice2_status/tunes.gif" width="22" height="18">
'.$ice2_station.' Не работает! </font></b></td>
</tr>
</tr>
</table>';

//edit html to fit your stations site, this display is for online status
else echo '<table width="100%" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
<tr><center>
<td width="100%"><b><font face="Arial" size="2">
<tr>
<td width="100%"><b><font face="Georgia" color="green" size="2">
'.$ice2_station.' <img border="0" src="online.jpg" width="110" height="20"> </font></b></td><center>
</tr>
<tr>
<td width="100%"><b><font face="Georgia" color="red" size="2">
<img border="0" src="user.jpg" width="40" height="40">
Слушателей:'.$listeners.' </font></b></td>
</tr>

<tr>
<td width="100%"><b><font face="Georgia" color="green" size="2">
<img border="0" src="radio_play.png" width="40" height="40">
Трек:'.$cur_song.' </font></b></td>
</tr>

</tr>
</table>';
}

?></html>

Итак вопросы:
1)Можно ли как-нибудь научить SAM отправлять теги в UTF-8?
2)Как сделать перекодировку текста в <windows-1251> не меняя настроек веб-сервера?
P.S. Вариант с изменением <charset>windows-1251</charset> в маунте айскаста и <meta http-equiv="Content-Type" content="text/html;charset=windows-1251" > не помогает.
Заранее спасибо за ответ.

86
Mafiozo @Mafiozo
ставь версию отсюда: **********
Хотя бы KH1

7
Hamsterenok @Hamsterenok
Не особо понимаю её преимущества, касательно кодировки. Можно подробнее, чем она отличается от обычной 2.3.2?

468
Klef @Klef
1) <charset>cp1251</charset>
2) iconv('CP1251','UTF-8',$text); и iconv('UTF-8','CP1251',$text);

7
Hamsterenok @Hamsterenok
2Klef, огромное спасибо, но мои знания PHP оставляют желать лучшего, подскажи пожалуйста куда именно вписать iconv в скрипте.

468
Klef @Klef
в любое место.
**********
первая строка от гугла

это функция перевода кодировки.
т.е. если у нас есть
echo $text;
и текст идет в кодировки UTF-8 а нам надо отображать в cp1251 то у нас получается
echo iconv('UTF-8','CP1251',$text);

366
retro4u @retro4u
Hamsterenok пишет:

2Klef, огромное спасибо, но мои знания PHP оставляют желать лучшего, подскажи пожалуйста куда именно вписать iconv в скрипте.

Klef советует тебе использовать функцию iconv,которая принудительно сменит в любой из выбранных строк кодировку)

Отредактировано retro4u - 03.12.2009
7
Hamsterenok @Hamsterenok
Всё, разобрался. Ещё раз огромное спасибо!

Отредактировано Hamsterenok - 04.12.2009
468
Klef @Klef
Hamsterenok пишет:

Всё, разобрался. Ещё раз огромное спасибо!

молодец ;)
всегда старайся сам модернизировать скрипт, это дает опыт и громадное удовлетворение.

6245
Тарас @tarasian666
я б не рекомендовал использовать iconv (почему - гугл)
мой скрипт
if( mb_detect_encoding($string,"UTF-8, ISO-8859-1")!="UTF-8" ) {$string = utf8_encode($string);}
в основном все теги в кодировке ISO-8859-1, редко попадается другая (в принципе не должна т.к. кодировка id3v1 - ISO-8859-1 или utf-8, id3v2 utf-16)
потому можно аналогично добавить if( mb_detect_encoding($string,"CP1251, ISO-8859-1")!="UTF-8" ) {$string = utf8_encode($string);}
и тд

468
Klef @Klef
Можно про недостатки iconv, беглый поиск ответа не дал

6245
Тарас @tarasian666
мда... беглым поиском и я теперь не найду.. раз както наткнулся, iconv то ли ресурсов больше жрет, то ли не все символы распознает верно..
но не заставляю ее не использовать, на себе ее не испытывал..
И чисто моя субьективная мысль что iconv используєет "громоздкие" библиотеки, а utf8_encode предназначена чисто для перекодирования в utf-8

468
Klef @Klef
хм, громоздкость, за ней не заметил, хотя железо "нелеквид" и оценка ресурсоемкости производиться очень часто.
А вот насчет необработки некоторых символов, тоже инфу находил, но как бы задачи у меня перед ней, и не требует 100% точности ;)

6245
Тарас @tarasian666
ну впринципе да...
прсто у меня задача была где точность нужна

2
swart @swart
пробывал описанные тут оба варианта кодировка немного изменилась но не кирилица выводит так вот Òðåê: Ëèçà - ГЌГҐ Г‘ Òîáîé (Remix)
помогите плиз решить проблему

<html><head><meta http-equiv="Content-Type" content="text/html;></head>
<charset>cp1251</charset>
iconv('CP1251','UTF-8',$text);
iconv('UTF-8','CP1251',$text);
<?php
$ip = "78.30.228.174";
$port = "8000";
$ice2_station = "HOT Radio";


$fp = fsockopen("$ip", $port, &$errno, &$errstr, 30); //open connection
if(!$fp) {
$success=2; //set if no connection



//edit html to fit your stations site, this display is for offline status
echo'<table>
<tr>
<td width="100%" colspan="2">
<img border="0" src="images/offline.gif" width="22" height="22">
<b><font face="Georgia" size="5" color="#FF0000">'.$ice2_station.' сейчас не работает</font></b></td>
</tr>
</table>';
}

if($success!=2){ //if connection
fputs($fp,"GET /status2.xsl HTTP/1.0\r\nUser-Agent: Icecast2 XSL Parser (Mozilla Compatible)\r\n\r\n"); //get status2.xsl
while(!feof($fp)) {
$page .= fgets($fp, 1000);
}
fclose($fp); //close connection
$page = ereg_replace(".*<pre>", "", $page); //extract data
$page = ereg_replace("</pre>.*", ",", $page); //extract data



$numbers = explode(",",$page); //bomb it and extract data
$mount = $numbers[0];
$connections = $numbers[1];
$stream_n = $numbers[2];
$listeners = $numbers[3];
$desc = $numbers[4];
$cur_song = $numbers[5];
$str_url = $numbers[6];
$client_info = $numbers[7];
$test1 = $numbers[8]; //set vars that where empty and still dont know what
$mount = $numbers[11];
$connections = $numbers[12];
$station =$numbers[13];
$listeners = $numbers[14];
$description = $numbers[15];
$cur_song = $numbers[16];
$www_url = $numbers[17];
if (strlen($mount)<2) echo '<table width="100%" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
<tr>
<td width="100%"><b><font face="Arial" size="2">
<tr>
<td width="100%"><b><font face="Georgia" color="green" size="5">
<img border="0" src="images/ice2_status/tunes.gif" width="22" height="18">
'.$ice2_station.' Не работает! </font></b></td>
</tr>
</tr>
</table>';

//edit html to fit your stations site, this display is for online status
else echo '<table width="100%" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
<tr><center>
<td width="100%"><b><font face="Arial" size="2">
<tr>
<td width="100%"><b><font face="Georgia" color="green" size="2">
'.$ice2_station.' <img border="0" src="online.jpg" width="110" height="20"> </font></b></td><center>
</tr>
<tr>
<td width="100%"><b><font face="Georgia" color="red" size="2">
<img border="0" src="user.jpg" width="40" height="40">
Слушателей:'.$listeners.' </font></b></td>
</tr>

<tr>
<td width="100%"><b><font face="Georgia" color="green" size="2">
<img border="0" src="radio_play.png" width="40" height="40">
Трек:'.$cur_song.' </font></b></td>
</tr>

</tr>
</table>';
}

?></html>

Отредактировано swart - 17.12.2009
468
Klef @Klef
Зачем в этом коде "<charset>cp1251</charset>"?
к чему "iconv('CP1251','UTF-8',$text); iconv('UTF-8','CP1251',$text);" в начале кода?
имеется представление о языках программирования?

6245
Тарас @tarasian666
О БОГИ!!! но самое главное что iconv не всередине php

2
swart @swart
Klef пишет:

Зачем в этом коде "<charset>cp1251</charset>"?
к чему "iconv('CP1251','UTF-8',$text); iconv('UTF-8','CP1251',$text);" в начале кода?
имеется представление о языках программирования?

представление на начальном уровне только начинаю вкуривать...
а charset для вывода в виндовой кодировке

468
Klef @Klef
charset
в конфиге айса
iconv функция внутри блока php, т.е. что то равно iconv чего то, или echo iconv
а так полностью согласен с tarasian666

36
lespaul43 @lespaul43
echo'
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<body style="margin:0 0 0 0; background-color:#000; color:#fff">
<b><style="font-family:Arial; font-size:2;">В эфире:
iconv('ISO-8859-1','UTF-8',$cur_song)</font></b>
</body>
</html>';

данный код почему-то ничего не отображает, есть подозрения на неправильную расстановку кавычек, но пробовал по-разному - не помогает - ничего не отображает, просто пустота (цвет фона тоже не меняет)
П.С.
и кстати icecast отдаёт в кодировке windows-1252 по данным декодера от студии всеми любимого Артемия Лебедева