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

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

 

7
Hamsterenok @Hamsterenok
Заранее прошу прощения, если подобный вопрос уже был на форуме. Я прочитал много гайдов по данной проблеме, но так ничего мне и не помогло. Проблема в отображение кодировки тегов на сайте. Вместо русских букв - абракадабра.
Софт который используется:
ОС - FreeBSD
Веб-сервер - nginx
Сервер радио - icecast
Клиент для вещания - SAM Broadcaster.
Скрипт для вывода статистики: -
  1. <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" ></head><?php
  2. $ip = "ktkp.mine.nu";
  3. $port = "82";
  4. $ice2_station = "Радио KTKP";
  5. $fp = fsockopen("$ip", $port, &$errno, &$errstr, 30); //open connection
  6. if(!$fp) {
  7. $success=2; //set if no connection
  8. //edit html to fit your stations site, this display is for offline status
  9. echo'<table>
  10. <tr>
  11. <td width="100%" colspan="2">
  12. <img border="0" src="images/offline.gif" width="22" height="22">
  13. <b><font face="Georgia" size="5" color="#FF0000">'.$ice2_station.' сейчас не работает</font></b></td>
  14. </tr>
  15. </table>';
  16. }
  17. if($success!=2){ //if connection
  18. fputs($fp,"GET /status2.xsl HTTP/1.0\r\nUser-Agent: Icecast2 XSL Parser (Mozilla Compatible)\r\n\r\n"); //get status2.xsl
  19. while(!feof($fp)) {
  20. $page .= fgets($fp, 1000);
  21. }
  22. fclose($fp); //close connection
  23. $page = ereg_replace(".*<pre>", "", $page); //extract data
  24. $page = ereg_replace("</pre>.*", ",", $page); //extract data
  25. $numbers = explode(",",$page); //bomb it and extract data
  26. $mount = $numbers[0];
  27. $connections = $numbers[1];
  28. $stream_n = $numbers[2];
  29. $listeners = $numbers[3];
  30. $desc = $numbers[4];
  31. $cur_song = $numbers[5];
  32. $str_url = $numbers[6];
  33. $client_info = $numbers[7];
  34. $test1 = $numbers[8]; //set vars that where empty and still dont know what
  35. $mount = $numbers[11];
  36. $connections = $numbers[12];
  37. $station =$numbers[13];
  38. $listeners = $numbers[14];
  39. $description = $numbers[15];
  40. $cur_song = $numbers[16];
  41. $www_url = $numbers[17];
  42. if (strlen($mount)<2) echo '<table width="100%" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
  43. <tr>
  44. <td width="100%"><b><font face="Arial" size="2">
  45. <tr>
  46. <td width="100%"><b><font face="Georgia" color="green" size="5">
  47. <img border="0" src="images/ice2_status/tunes.gif" width="22" height="18">
  48. '.$ice2_station.' Не работает! </font></b></td>
  49. </tr>
  50. </tr>
  51. </table>';
  52. //edit html to fit your stations site, this display is for online status
  53. else echo '<table width="100%" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
  54. <tr><center>
  55. <td width="100%"><b><font face="Arial" size="2">
  56. <tr>
  57. <td width="100%"><b><font face="Georgia" color="green" size="2">
  58. '.$ice2_station.' <img border="0" src="online.jpg" width="110" height="20"> </font></b></td><center>
  59. </tr>
  60. <tr>
  61. <td width="100%"><b><font face="Georgia" color="red" size="2">
  62. <img border="0" src="user.jpg" width="40" height="40">
  63. Слушателей:'.$listeners.' </font></b></td>
  64. </tr>
  65. <tr>
  66. <td width="100%"><b><font face="Georgia" color="green" size="2">
  67. <img border="0" src="radio_play.png" width="40" height="40">
  68. Трек:'.$cur_song.' </font></b></td>
  69. </tr>
  70. </tr>
  71. </table>';
  72. }
  73. ?></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" > не помогает.
Заранее спасибо за ответ.

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

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

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

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

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

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

0
366
retro4u @retro4u
Hamsterenok пишет:

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

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

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

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

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

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

0
6245
Тарас @tarasian666
я б не рекомендовал использовать iconv (почему - гугл)
мой скрипт
  1. 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)
потому можно аналогично добавить
  1. if( mb_detect_encoding($string,"CP1251, ISO-8859-1")!="UTF-8" ) {$string = utf8_encode($string);}

и тд

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

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

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

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

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

  1. <html><head><meta http-equiv="Content-Type" content="text/html;></head>
  2. <charset>cp1251</charset>
  3. iconv('CP1251','UTF-8',$text);
  4. iconv('UTF-8','CP1251',$text);
  5. <?php
  6. $ip = "78.30.228.174";
  7. $port = "8000";
  8. $ice2_station = "HOT Radio";
  9. $fp = fsockopen("$ip", $port, &$errno, &$errstr, 30); //open connection
  10. if(!$fp) {
  11. $success=2; //set if no connection
  12. //edit html to fit your stations site, this display is for offline status
  13. echo'<table>
  14. <tr>
  15. <td width="100%" colspan="2">
  16. <img border="0" src="images/offline.gif" width="22" height="22">
  17. <b><font face="Georgia" size="5" color="#FF0000">'.$ice2_station.' сейчас не работает</font></b></td>
  18. </tr>
  19. </table>';
  20. }
  21. if($success!=2){ //if connection
  22. fputs($fp,"GET /status2.xsl HTTP/1.0\r\nUser-Agent: Icecast2 XSL Parser (Mozilla Compatible)\r\n\r\n"); //get status2.xsl
  23. while(!feof($fp)) {
  24. $page .= fgets($fp, 1000);
  25. }
  26. fclose($fp); //close connection
  27. $page = ereg_replace(".*<pre>", "", $page); //extract data
  28. $page = ereg_replace("</pre>.*", ",", $page); //extract data
  29. $numbers = explode(",",$page); //bomb it and extract data
  30. $mount = $numbers[0];
  31. $connections = $numbers[1];
  32. $stream_n = $numbers[2];
  33. $listeners = $numbers[3];
  34. $desc = $numbers[4];
  35. $cur_song = $numbers[5];
  36. $str_url = $numbers[6];
  37. $client_info = $numbers[7];
  38. $test1 = $numbers[8]; //set vars that where empty and still dont know what
  39. $mount = $numbers[11];
  40. $connections = $numbers[12];
  41. $station =$numbers[13];
  42. $listeners = $numbers[14];
  43. $description = $numbers[15];
  44. $cur_song = $numbers[16];
  45. $www_url = $numbers[17];
  46. if (strlen($mount)<2) echo '<table width="100%" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
  47. <tr>
  48. <td width="100%"><b><font face="Arial" size="2">
  49. <tr>
  50. <td width="100%"><b><font face="Georgia" color="green" size="5">
  51. <img border="0" src="images/ice2_status/tunes.gif" width="22" height="18">
  52. '.$ice2_station.' Не работает! </font></b></td>
  53. </tr>
  54. </tr>
  55. </table>';
  56. //edit html to fit your stations site, this display is for online status
  57. else echo '<table width="100%" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
  58. <tr><center>
  59. <td width="100%"><b><font face="Arial" size="2">
  60. <tr>
  61. <td width="100%"><b><font face="Georgia" color="green" size="2">
  62. '.$ice2_station.' <img border="0" src="online.jpg" width="110" height="20"> </font></b></td><center>
  63. </tr>
  64. <tr>
  65. <td width="100%"><b><font face="Georgia" color="red" size="2">
  66. <img border="0" src="user.jpg" width="40" height="40">
  67. Слушателей:'.$listeners.' </font></b></td>
  68. </tr>
  69. <tr>
  70. <td width="100%"><b><font face="Georgia" color="green" size="2">
  71. <img border="0" src="radio_play.png" width="40" height="40">
  72. Трек:'.$cur_song.' </font></b></td>
  73. </tr>
  74. </tr>
  75. </table>';
  76. }
  77. ?></html>

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

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

0
2
swart @swart
Klef пишет:

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

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

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

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

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

0





Согласие на обработку данных на нашем сайте

Продолжая просматривать страницу, вы соглашаетесь с использованием файлов «Cookie» и с Политикой конфиденциальности «Privacy».
Наверху или внизу страницы вы можете изменить валюту и язык по умолчанию. Английская версия сайта ещё находится в доработке и доступна не полностью.