22 Listopad 2024, 01:26:38

Autor Wątek: [PHP] ShoutCast XML  (Przeczytany 10990 razy)

metonator

  • Początkujący
  • *
  • Wiadomości: 9
    • Status GG
    • pixeland.pl
[PHP] ShoutCast XML
« dnia: 06 Marzec 2013, 21:21:19 »
Witam

czasami jak w radiu jest grany track z normalnymi znakami (lub nie), wyskakuje błąd typu: xmlParseCharRef: invalid xmlChar value 25

Ktos wie co to moze oznaczac i jak to naprawic?
pod spodem podaje 2 pliki php (1 to parser, a 2 to zwykly wywoływacz):

SHOUTCAST.INC.PHP
<?phpheader("Content-Type: text/xml; charset=UTF-8"); error_reporting(E_ALL);$ch = curl_init("http://4stream.pl:18386/admin.cgi?mode=viewxml&pass=NIEDAM!!");curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); $xml = curl_exec($ch); echo utf8_encode($xml); curl_close($ch);?>


PLIK.PHP
<?phperror_reporting(E_ALL);header(&#39;Content-type: text/html;charset=iso-8859-2&#39;);$feed_url = "http://beta.xfm-radio.tk/shoutcast.inc.php";$feed = simplexml_load_file($feed_url);$limit = 20;$x = 1;foreach($feed->SONGHISTORY->SONG as $item) {	if ($x <= $limit) {		$song_history = $item->TITLE;				$replaced = str_replace(array(" (www.djoles.pl)", " Redmusic.pl", " 4clubbers.pl", " 4clubbers.com.pl"), " ", $item->TITLE);				$replaced = str_replace("³", "ł", $replaced);				$lol = htmlentities($replaced, ENT_COMPAT , &#39;UTF-8&#39;);		echo($lol.&#39;<br>&#39;);	}	$x++;}?>

« Ostatnia zmiana: 06 Marzec 2013, 21:25:02 wysłana przez karol »

Karol

  • Administrator
  • Mistrz radiofonii
  • *****
  • Wiadomości: 1785
Odp: [PHP] ShoutCast XML
« Odpowiedź #1 dnia: 06 Marzec 2013, 21:26:12 »
Czy jak wyrzucisz z pierwszego pliku linijkę:
echo utf8_encode($xml);
to działa tak samo?

metonator

  • Początkujący
  • *
  • Wiadomości: 9
    • Status GG
    • pixeland.pl
Odp: [PHP] ShoutCast XML
« Odpowiedź #2 dnia: 06 Marzec 2013, 21:35:49 »
Czy jak wyrzucisz z pierwszego pliku linijkę:
echo utf8_encode($xml);
to działa tak samo?

Dziala inaczej, wywali błąd: Warning: simplexml_load_file(): http://beta.xfm-radio.tk/shoutcast.inc.php:1: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0x81 0x7A 0x73 0x20 in /home/vservetk/domains/xfm-radio.tk/public_html/beta/tracks.php on line 6 Warning: simplexml_load_file(): G>1362599028

wavemusic

  • Radiowiec
  • **
  • Wiadomości: 49
Odp: [PHP] ShoutCast XML
« Odpowiedź #3 dnia: 06 Marzec 2013, 22:11:06 »
Sprobuj zmienic tez w pliku o nazwie plik.php charset z iso 8859-2 na UTF-8. I powiedz co sie dzieje?

metonator

  • Początkujący
  • *
  • Wiadomości: 9
    • Status GG
    • pixeland.pl
Odp: [PHP] ShoutCast XML
« Odpowiedź #4 dnia: 07 Marzec 2013, 17:27:50 »
niestety tez nic nie daje jako iz testowalem wszystkoe naglowki i nic :(

wavemusic

  • Radiowiec
  • **
  • Wiadomości: 49
Odp: [PHP] ShoutCast XML
« Odpowiedź #5 dnia: 07 Marzec 2013, 20:01:24 »
pokaz plik tracks.php

metonator

  • Początkujący
  • *
  • Wiadomości: 9
    • Status GG
    • pixeland.pl
Odp: [PHP] ShoutCast XML
« Odpowiedź #6 dnia: 07 Marzec 2013, 20:24:34 »
<?phperror_reporting(E_ALL);$feed_url = "http://beta.xfm-radio.tk/shoutcast.inc.php";$feed = simplexml_load_file($feed_url);$limit = 20;$x = 1;foreach($feed->SHOUTCASTSERVER->SONGHISTORY->SONG as $item) {	if ($x <= $limit) {		$song_history = $item->TITLE;				$replaced = str_replace(array(" (www.djoles.pl)", " Redmusic.pl", " 4clubbers.pl", " 4clubbers.com.pl"), " ", $item->TITLE);				$replaced = str_replace("³", "ł", $replaced);				$replaced = htmlentities($replaced, ENT_COMPAT, &#39;UTF-8&#39;);				echo($replaced.&#39;<br>&#39;);	}	$x++;}?>

« Ostatnia zmiana: 07 Marzec 2013, 21:03:35 wysłana przez karol »

Karol

  • Administrator
  • Mistrz radiofonii
  • *****
  • Wiadomości: 1785
Odp: [PHP] ShoutCast XML
« Odpowiedź #7 dnia: 07 Marzec 2013, 21:04:50 »
Czy jak zakomentujesz te linijki:
$replaced = str_replace("³", "ł", $replaced);
$replaced = htmlentities($replaced, ENT_COMPAT, 'UTF-8');

To działa?

metonator

  • Początkujący
  • *
  • Wiadomości: 9
    • Status GG
    • pixeland.pl
Odp: [PHP] ShoutCast XML
« Odpowiedź #8 dnia: 08 Marzec 2013, 00:00:18 »
Na szczescie tylko w polowie, zamieni mi 3 na polskie l, i nie wywali bledy encoding 0x20 0x65 ........ Ale tylko ten 1 problemik mam

Karol

  • Administrator
  • Mistrz radiofonii
  • *****
  • Wiadomości: 1785
Odp: [PHP] ShoutCast XML
« Odpowiedź #9 dnia: 08 Marzec 2013, 16:49:36 »
To ten header w pliku php przestaw na:
header('Content-type: text/html;charset=windows-1252');
Chociaż z drugiej strony u mnie Twój kod działa poprawnie:
http://www.4stream.pl/test/plik.php

Może Ci się wywala na jakieś jednej konkretnej piosence, bo ma nazwę nie do końca poprawną?
« Ostatnia zmiana: 08 Marzec 2013, 16:57:53 wysłana przez Karol »

metonator

  • Początkujący
  • *
  • Wiadomości: 9
    • Status GG
    • pixeland.pl
Odp: [PHP] ShoutCast XML
« Odpowiedź #10 dnia: 09 Marzec 2013, 00:34:40 »
No ostatnio tez to zauwazylem, kolega zatwierdzil ze to byla jakas piosenka skrillexa, jak sie znow pokaze blad to powiadomie

XANT3R

  • Radiowiec
  • **
  • Wiadomości: 52
Odp: [PHP] ShoutCast XML
« Odpowiedź #11 dnia: 09 Marzec 2013, 01:50:05 »
To była piosenka Skrillex - Breakn A Sweat (Original Mix) w vdj nie pokazuje jakiś specjalnych znaków, które powodowały by krzaczenie się skryptu --> http://prntscr.com/vk04d 8)

metonator

  • Początkujący
  • *
  • Wiadomości: 9
    • Status GG
    • pixeland.pl
Odp: [PHP] ShoutCast XML
« Odpowiedź #12 dnia: 09 Marzec 2013, 17:02:21 »
pojawil sie moj blad o ktorym opisywalem: http://beta.xfm-radio.tk/current.php

ostatnie odebrane pakiety: Czarny HiFi - Ludzie Mówi
nazwa piosenki: Czarny HIFI - Ludzie mówią feat. Grizzullah, Cheeba

wiec blad lezy po literce Ą, tylko jak to naprawic w PHP? (ewentualnie w VDJ)

Karol

  • Administrator
  • Mistrz radiofonii
  • *****
  • Wiadomości: 1785
Odp: [PHP] ShoutCast XML
« Odpowiedź #13 dnia: 09 Marzec 2013, 18:11:13 »
Problem leży po stronie ShoutCasta i PHP jednocześnie. ShoutCast nie radzi sobie z innym kodowaniem niż windows-1252, w którym polskie znaki są kodowane inaczej niż w polskich windowsach (Windows-1250). PHP zapisany w UTF-8 z kolei oczekuje, że plik XML będzie w UTF-8. I tak powstaje mętlik.

Myślę, że warto najpierw pobrać zawartość pliku XML z ShoutCasta do zmiennej (cURL, fopen, fsockopen), zastosować funkcję htmlspecialchars() lub jakąś inną, która pozbędzie się polskich znaków i wtedy dopiero wrzucić to do parsera xml.