1

Тема: CP1252 ? CP1251

Пользуюсь скриптом для вывода статистики из SHOUTcast
Но выдает в 1252.. куда я не вставлял только

$content = html_entity_decode($content, 0, "cp1251");

и

html_entity_decode($content, 0, "cp1251");

Хост платный..
В чем может быть проблема?

<?php
include('config_radio.php');

$scfp = fsockopen("$scip", $scport, &$errno, &$errstr, 30);
 if(!$scfp) {
  $scsuccs=1;
echo''.$scdef.' is Offline'; 
 }
if($scsuccs!=1){
 fputs($scfp,"GET /admin.cgi?pass=$scpass&mode=viewxml HTTP/1.0\r\nUser-Agent: SHOUTcast Song Status (Mozilla Compatible)\r\n\r\n");
 while(!feof($scfp)) {
  $page .= fgets($scfp, 1000);
 }
 $loop = array("STREAMSTATUS", "BITRATE", "SERVERTITLE", "CURRENTLISTENERS", "MAXLISTENERS", "BITRATE");
 $y=0;
 while($loop[$y]!=''){
  $pageed = ereg_replace(".*<$loop[$y]>", "", $page);
  $scphp = strtolower($loop[$y]);
  $$scphp = ereg_replace("</$loop[$y]>.*", "", $pageed);
  if($loop[$y]==SERVERGENRE || $loop[$y]==SERVERTITLE || $loop[$y]==SONGTITLE || $loop[$y]==SERVERTITLE)
   $$scphp = urldecode($$scphp);
  $y++;
 }
 $pageed = ereg_replace(".*<SONGHISTORY>", "", $page);
 $pageed = ereg_replace("<SONGHISTORY>.*", "", $pageed);
 $songatime = explode("<SONG>", $pageed);
 $r=1;
 while($songatime[$r]!=""){
  $t=$r-1;
  $playedat[$t] = ereg_replace(".*<PLAYEDAT>", "", $songatime[$r]);
  $playedat[$t] = ereg_replace("</PLAYEDAT>.*", "", $playedat[$t]);
  $song[$t] = ereg_replace(".*<TITLE>", "", $songatime[$r]);
  $song[$t] = ereg_replace("</TITLE>.*", "", $song[$t]);
  $song[$t] = urldecode($song[$t]);
  $dj[$t] = ereg_replace(".*<SERVERTITLE>", "", $page);
  $dj[$t] = ereg_replace("</SERVERTITLE>.*", "", $pageed);
$r++;
 }
fclose($scfp);
}

if($streamstatus == "1"){
echo'
<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<link rel=stylesheet href="" type="text/css">
<title>'.$scdef.'</title>
</head>

<body text="" bgcolor="">


<p align="center"><center>
<img src="online.jpg"><br>
<b>Stream Title:</b> '.$servertitle.'<br>
<b>Listeners:</b> '.$currentlisteners.' / '.$maxlisteners.'<br>
<b>Bitrate:</b> '.$bitrate.'kbps<br>
<b>Current Song:</b> '.$song[0].'</p><b>
</p>
</body>

</html>';
}
if($streamstatus == "0")
{
echo'
<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<link rel=stylesheet href="" type="text/css">
<title>Radio Server Is Offline</title>
</head>

<body text="" bgcolor="">
<center>
<img src="offline.jpg">
</body>

</html>';
}
?>

2

Re: CP1252 ? CP1251

html_entity_decode функция для преобразования html символов в текст а не для перекодирования.
если б внимательней читали форму то б нашли iconv('UTF-8','CP1251',$text);

3

Re: CP1252 ? CP1251

Народ только умничать умеет а сам не чего не знает!
Так как по аси только все умничают!

Я день отмучался но проблему решил - покажите мне на форуме ГДЕ ЭТО ОБСУЖДАЛОСЬ? (так как именно так мне ответили)

iconv(‘windows-1252?,’utf-8//IGNORE’,'текст’);  не помогло возвращало  ??????? 11

даже так не хочет перкодировать -

$song[$t]= mb_convert_encoding($song[$t], mb_detect_encoding($song[$t], "CP1252"), "UTF8");
$song[$t]= mb_convert_encoding($song[$t], "UTF8", "CP1251");

Вот решение проблемы -

находим -

$song[$t] = urldecode($song[$t]);

меняем на

$song[$t] = html_entity_decode($song[$t]);

P.S. все гениальное - просто!

Отредактировано kavadims (17-01-2010 19:42:45)

4

Re: CP1252 ? CP1251

пишет kavadims:

ДЕ ЭТО ОБСУЖДАЛОСЬ? (так как именно так мне ответили)

а поиск зачем?
но видите сами справились, а подняли столько шума.
И не советую нагло стучать посторонним людям в асю за помощью "без пива",
И тверждать что разбираетесь в програмировании когда для изменения одной переменной просто вставляете в начале кода iconv('UTF-8','CP1251',$text); тем более что переменная $text не встречается в даном скрипте. то же самое про $content = html_entity_decode($content, 0, "cp1251");

пишет kavadims:

Народ только умничать умеет а сам не чего не знает!

не судите да несудимы будете

5

Re: CP1252 ? CP1251

пишет kavadims:

Вот решение проблемы -

находим -

$song[$t] = urldecode($song[$t]);

меняем на

$song[$t] = html_entity_decode($song[$t]);

P.S. все гениальное - просто!

Чувак, ты МЕГА!!! Я вчера весь день на это убил, а ты дал 100% решение!!!! Аллилуйя!!! Путь Бог тебя благословит за это!!!!

Кстати, в названии радиостанции, если тоже кракозябры, меняем urldecode на html_entity_decode

Отредактировано guestalex (09-09-2012 18:54:01)