Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Program telewizyjny - problem z kodowaniem UTF8
Forum PHP.pl > Forum > Przedszkole
majestiq
Znalazłem na forum skrypt do pobierania programu tv:


  1. <?php
  2.  
  3. /************************************************************************
  4.  *
  5.  *                  ********************************
  6.  *
  7.  *                         PROGRAM TELEWIZYJNY
  8.  *
  9.  ************************************************************************/
  10.  
  11. function programtv($tv_stacja = false, $date = false, $from_to = false)
  12. {
  13.   $data = ($date) ? $date : date('Y-m-d');
  14.   $stacja = ($tv_stacja) ? $tv_stacja : 17;
  15.   $titles = array('Kawa czy herbata?', 'Przyroda Ameryki'); # ITD...
  16.  
  17.   if(!eregi('..', $from_to))
  18.      $from_to = false;
  19.  
  20.   define('TV_DATA', $data);        # Domyslna data wyswietlania
  21.   define('TV_STACJA_ID', $stacja);    # Numer stacji
  22.   define('FROM_TO', $from_to);        # Zakres godziny przy wyswietlaniu
  23.                    # OD..DO, np. 12:00..14:00
  24.                    # lub "false" aby caly dzien wyswietlic
  25.  
  26.   $url = 'http://tv.wp.pl/index_druk.html?T[date]='.TV_DATA.'&T[time]=0&T[category]=ALL&T[station]='.TV_STACJA_ID.'&T[page]=1&T[ctime]=0';
  27.  
  28.   $handle = implode("", file($url));
  29.  
  30.   if(preg_match_all('#<b class="ng">(.*?)</b>#is', $handle, $nazwa))
  31.   {
  32.      define('TV_STACJA', $nazwa[1][0]);
  33.  
  34.      if(preg_match_all('#<td class="drukowalne" (.*?)</td>#is', $handle, $result))
  35.      {
  36.         $res = $result[1];
  37.         $i=0; $a=0; $b=0;
  38.  
  39.         while($b<count($res)/2)
  40.         {
  41.            $tmp = '<'.$res[$i];
  42.  
  43.            if(eregi('hit.gif', $tmp) && $ishit == false) {
  44.               $hit = true;
  45.               $ishit = true;
  46.            }
  47.            else
  48.               $hit = false;
  49.  
  50.            $date = strip_tags($tmp, '<br>');
  51.            $tmp = '<'.$res[$i+1];
  52.            $title = strip_tags($tmp, '<br>');
  53.            $desc = '';
  54.  
  55.            if(eregi('<br>', $title))
  56.            {
  57.               $list = explode('<br>', $title);
  58.               $title = $list[0];
  59.  
  60.               for($j=1; $j<count($list); $j++)
  61.               {
  62.                     $desc.= $list[$j].'<br>';
  63.               }
  64.               $desc = substr($desc, 0, -4);
  65.               if(strlen($desc) < 25) $desc = '   ';
  66.            }
  67.  
  68.            if(count($titles) > 0)
  69.            {
  70.               foreach($titles as $t)
  71.               {
  72.                  if(eregi($t, $title))
  73.                     $title = $t;
  74.               }
  75.            }
  76.    
  77.            $time = strtotime(TV_DATA.' '.$date);
  78.            if(date('H', $time) <= 04 && date('i', $time) <= 40)
  79.               $time+= 3600*24;
  80.  
  81.            $from = 0; $to = 0;
  82.            if(ereg('..', FROM_TO))
  83.            {
  84.               list($from, $to) = explode('..', FROM_TO);
  85.  
  86.               $from = strtotime(TV_DATA.' '.$from);
  87.               $to = strtotime(TV_DATA.' '.$to);
  88.  
  89.            }
  90.  
  91.            if(($from <> 0 AND $from <= $time AND $to <> 0 AND $to >= $time) OR FROM_TO == false)
  92.            {
  93.               $Tab[$a]['time'] = $time;
  94.               $Tab[$a]['title'] = $title;
  95.               $Tab[$a]['desc'] = $desc;
  96.  
  97.               if($hit == true)
  98.                  $Tab[$a]['hit'] = true;
  99.               else
  100.                  $Tab[$a]['hit'] = false;
  101.  
  102.               $a++;
  103.            }
  104.            $i+=2;
  105.            $b++;
  106.         }
  107.      }
  108.   }
  109.  
  110.   return $Tab;
  111. }
  112. ?>





  1. <?php
  2.  
  3. header('Content-type: text/html; charset=utf-8');
  4. iconv_set_encoding("internal_encoding", "utf-8");
  5. iconv_set_encoding("output_encodinf", "utf-8");
  6.  
  7. include('programtv.php'); # wczytujemy funkcję
  8.  
  9.  
  10. $dzisiaj = programtv(1, false, date("H:i", (time()-2*3600)).'..23:59');
  11. foreach($dzisiaj AS $iKey => $sValue)
  12. {
  13.        if($sValue['time']<time() AND $dzisiaj[$iKey+1]['time']>time())
  14.        echo date("H:i", $sValue['time']) . ' - <b>' .$sValue['title'] .'</b><br />';
  15.        else
  16.        echo date("H:i", $sValue['time']) . ' - ' .$sValue['title'] .'<br />';    
  17. }
  18. ?>



Oba pliki są zapisane w utf8, jednak jak odpalam program z przeglądarki to są krzaki, chyba że przestawi się kodowanie na latin2 to wtedy jest dobrze.
Gdzie tkwi błąd ?
Co zrobić żeby program działał w tym kodowaniu bez krzaczków ?
insecure
Czy są gdzieś te skrypty Online?
wookieb
literówka
iconv_set_encoding("output_encodinf", "utf-8");

output_encoding
majestiq
Fakt, literówka była, ale po poprawie dalej kodowanie jest poprawne tylko przy wybraniu w przeglądarce iso-8859-2, w utf są krzaki.
Help!
wookieb
Dodaj w odpowiednim miejscu
Kod
$handle=iconv("ISO-8859-2","UTF-8",$handle);
majestiq
Jeszcze jedno.
Chciałem ten program wyświetlać w tabeli - żeby było ładniej.
Dodatkowo chciałbym, żeby każdy kolejny wierz miał na zmianę inny kolor tła (zebra),
Czyli np 1 wiersz ma kolor szary, drugi ma kolor biały, trzevi znowu szary, kolejny biały i tak na zmianę, raz taki kolor a raz taki.

Zmodyfikowałem ten skrypt tak, ale coś namieszałem bo nie działa ta funkcjonalność:

  1. <?php
  2.  
  3.  
  4. include('programtv.php'); # wczytujemy funkcję
  5.  
  6.  
  7. $dzisiaj = programtv(1, false, date("H:i", (time()-2*3600)).'..23:59');
  8.  
  9. echo "<table style='font-family:tahoma; font-size:10px;'>";
  10.  
  11. foreach($dzisiaj AS $iKey => $sValue)
  12. {
  13. $pro =    $sValue['title'];
  14.    $prop = iconv("ISO-8859-2","UTF-8",$pro);
  15.  
  16.        if($sValue['time']<time() AND $dzisiaj[$iKey+1]['time']>time())
  17.            
  18.    
  19.  
  20.        echo '<tr><td style="font-size:11px;">'.date("H:i", $sValue['time']) . ' <br /><br /><b></td><td style="font-size:11px;">' .$sValue['title'] .'</b></td></tr><br />';
  21.        else
  22.        echo '<tr><td style="font-size:11px; background:#';
  23.            for ($i>0; $i<3; $i++) {
  24.                    if ($i=1)            {
  25.                                            echo "fff;>";
  26.                                        }
  27.                        else            {
  28.                                            echo "ccc;>";
  29.                                        }
  30.                                    }
  31.  
  32.        echo date("H:i", $sValue['time']) . ' <br /><br /></td><td style="font-size:11px;">' .$prop .'</td></tr><br />';    
  33. }
  34. echo "</table>";
  35. ?>


Błąd jest gdzieśw tych pętlach z kolorami.
Co źle robię ?
wookieb
popraw
Kod
if ($i=1)

na
Kod
if( $i == 1)
majestiq
No właśnie już wcześniej zauważyłem ten błąd, ale po poprawie już coś działa ale nie tak jak powinno bo wynik jest taki:

  1. <table style='font-family:tahoma; font-size:10px;'><tr><td style="font-size:11px;">08:30 <br /><br /><b></td><td style="font-size:11px;">Pytanie na śniadanie w tym Panorama o godz. 09.35 i Pogoda o godz. 09.00 i 10.10 </b></td></tr><br />ccc;">000;">ccc;">08:30 <br /><br /></td><td style="font-size:11px;">Pytanie na śniadanie w tym Panorama o godz. 09.35 i Pogoda o godz. 09.00 i 10.10 </td></tr><br /><tr><td style="font-size:11px; background:#10:45 <br /><br /></td><td style="font-size:11px;">Przygody Tarzana Niebezpieczne zwidy </td></tr><br /><tr><td style="font-size:11px; background:#11:15 <br /><br /></td><td style="font-size:11px;">Flipper Muzyka na plaży </td></tr><br /><tr><td style="font-size:11px; background:#12:10 <br /><br /></td><td style="font-size:11px;">Magnum Spojrzenie </td></tr><br /><tr><td style="font-size:11px; background:#12:55 <br /><br /></td><td style="font-size:11px;">Magazyn Ekstraklasy Szybka piłka Konkurs </td></tr><br /><tr><td style="font-size:11px; background:#13:00 <br /><br /></td><td style="font-size:11px;">Bliźniaczki w pułapce </td></tr><br /><tr><td style="font-size:11px; background:#13:55 <br /><br /></td><td style="font-size:11px;">M.A.S.H. </td></tr><br /><tr><td style="font-size:11px; background:#14:25 <br /><br /></td><td style="font-size:11px;">M jak miłość </td></tr><br /><tr><td style="font-size:11px; background:#15:25 <br /><br /></td><td style="font-size:11px;">Hit Generator </td></tr><br /><tr><td style="font-size:11px; background:#16:25 <br /><br /></td><td style="font-size:11px;">Córki McLeoda Więzy miłości </td></tr><br /><tr><td style="font-size:11px; background:#17:15 <br /><br /></td><td style="font-size:11px;">Kontakt </td></tr><br /><tr><td style="font-size:11px; background:#17:55 <br /><br /></td><td style="font-size:11px;">Kocham cię, Polsko Konkurs SMS-owy </td></tr><br /><tr><td style="font-size:11px; background:#18:00 <br /><br /></td><td style="font-size:11px;">Program lokalny </td></tr><br /><tr><td style="font-size:11px; background:#18:30 <br /><br /></td><td style="font-size:11px;">Panorama </td></tr><br /><tr><td style="font-size:11px; background:#18:55 <br /><br /></td><td style="font-size:11px;">Sport-telegram </td></tr><br /><tr><td style="font-size:11px; background:#18:59 <br /><br /></td><td style="font-size:11px;">Pogoda </td></tr><br /><tr><td style="font-size:11px; background:#19:05 <br /><br /></td><td style="font-size:11px;">Koło fortuny </td></tr><br /><tr><td style="font-size:11px; background:#19:35 <br /><br /></td><td style="font-size:11px;">Wideoteka dorosłego człowieka Andrzej Piaseczny </td></tr><br /><tr><td style="font-size:11px; background:#20:05 <br /><br /></td><td style="font-size:11px;">Barwy szczęścia </td></tr><br /><tr><td style="font-size:11px; background:#20:40 <br /><br /></td><td style="font-size:11px;">M jak miłość </td></tr><br /><tr><td style="font-size:11px; background:#21:35 <br /><br /></td><td style="font-size:11px;">Kulisy serialu "M jak miłość" </td></tr><br /><tr><td style="font-size:11px; background:#21:45 <br /><br /></td><td style="font-size:11px;">Magazyn Ekspresu Reporterów </td></tr><br /><tr><td style="font-size:11px; background:#22:35 <br /><br /></td><td style="font-size:11px;">Schwytani w sieci </td></tr><br /><tr><td style="font-size:11px; background:#23:30 <br /><br /></td><td style="font-size:11px;">Liga Mistrzów Skróty </td></tr><br /></table>


Czyli coś się dalej kaszani, tak jakby ta pętla miała być jeszcze wcześniej ?
wookieb
No a jeszcze przeanalizuj sobie co ty robisz
Kod
for ($i>0; $i<3; $i++)

zobacz pierwsza czesc petli. Chyba coś w niej jest nie tak.

Poza tym po co 3 razy wykonujesz tylko i wylacznie to
Kod
  if ($i=1) {
    echo "fff;>";
}
     else {
  echo "ccc;>";
  }
majestiq
Cytat(wookieb @ 5.05.2009, 09:52:22 ) *
No a jeszcze przeanalizuj sobie co ty robisz
Kod
for ($i>0; $i<3; $i++)

zobacz pierwsza czesc petli. Chyba coś w niej jest nie tak.

Poza tym po co 3 razy wykonujesz tylko i wylacznie to
Kod
  if ($i=1) {
    echo "fff;>";
}
     else {
  echo "ccc;>";
  }


2 razy chyba, ale za 1 <tr><td></td></tr> miał być jeden kolor
a za drugim, kolejny kolor, ale rzeczywiście nie tu gdzie trzeba jest ta pętla.
Może uda mi się to jakoś przerobić, jak nie to poproszę jeszcze o pomoc.


Coś mi to nie idzie.
Może ktoś podrzuci jakieś wskazówki jak przerobić ten kod:

  1. <?php
  2.  
  3.  
  4. include('programtv.php'); # wczytujemy funkcję
  5.  
  6. $dzisiaj = programtv(2, false, date("H:i", (time()-2*3600)).'..23:59');
  7.  
  8. echo "<table style='font-family:tahoma; font-size:10px;'>";
  9.  
  10. foreach($dzisiaj AS $iKey => $sValue)
  11. {
  12. $pro =    $sValue['title'];
  13.    $prop = iconv("ISO-8859-2","UTF-8",$pro);
  14.             echo date("H:i", $sValue['time']) . ' - <b>' .$prop .'</b><br />';
  15.       else
  16.       echo date("H:i", $sValue['time']) . ' - ' .$prop .'<br />';    
  17. }
  18. ?>


Chodzi o zrobienie pętli, która będzie wyświetlała kolejną pozycję programu z innym kolorem tła.
Np:

12.00 - Wiadomości (kolor tła biały)
12.30 - Program lokalny (kolor tła szary)
13.00 - Panorama (kolor znowu biały)
14.00 - Sport telegram (kolor znowu szary)
itd....

Jak przerobić ten kod i skonstruować odpowiednią pętlę, żeby uzyskać zamierzony efekt ?
wookieb
Było setki razy
  1. <?php
  2. if($iKey%2)
  3. {
  4.  
  5. }
  6. else
  7. {
  8.  
  9. }
  10. ?>

I zobacz co sobie z tym zrobisz.
majestiq
Ok, dzięki zrobiłem w ten sposób i już prawie gra gitara, tylko jest problem bo aktualny program (zaznaczony na czerwono)
dubluje się także w linii poniżej.

  1. <?php
  2.  
  3. include('programtv.php'); # wczytujemy funkcję
  4. $dzisiaj = programtv(1, false, date("H:i", (time()-2*3600)).'..23:59');
  5. echo "<table style='font-family:tahoma; font-size:10px;'>";
  6.  
  7.  
  8.  
  9.  
  10. foreach($dzisiaj AS $iKey => $sValue)
  11. if($iKey%2) {
  12. $pro =    $sValue['title'];
  13.    $prop = iconv("ISO-8859-2","UTF-8",$pro);
  14.  
  15.        if($sValue['time']<time() AND $dzisiaj[$iKey+1]['time']>time())
  16.            
  17.    
  18.  
  19.        echo '<tr><td  width="1%" style="font-size:11px;  background:#ff0000;">'.date("H:i", $sValue['time']) . ' <br /><br /><b></td><td style="font-size:11px; width:90%">' .$prop .'</b></td></tr><br />';
  20.        else
  21.        echo '<tr><td width="1%" style="font-size:11px; background:#ccc;">';
  22.            
  23.  
  24.        echo date("H:i", $sValue['time']) . ' <br /><br /></td><td style="font-size:11px; ">' .$prop .'</td></tr><br />';    
  25. }
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33. else
  34. {
  35. $pro =    $sValue['title'];
  36.    $prop = iconv("ISO-8859-2","UTF-8",$pro);
  37.  
  38.        if($sValue['time']<time() AND $dzisiaj[$iKey+1]['time']>time())
  39.            
  40.    
  41.  
  42.        echo '<tr><td width="1%" style="font-size:11px;  background:#ff0000;">'.date("H:i", $sValue['time']) . ' <br /><br /><b></td><td style="font-size:11px; ">' .$prop .'</b></td></tr><br />';
  43.        else
  44.        echo '<tr><td width="1%" style="font-size:11px; background:#eee;">';
  45.            
  46.  
  47.        echo date("H:i", $sValue['time']) . ' <br /><br /></td><td style="font-size:11px; ">' .$prop .'</td></tr><br />';  
  48. }
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56. echo "</table>";
  57. ?>



No i na górze też jest coś nie tak, poza tym już jest prawie ok.
Proszę jeszcze o małą pomoc lub jakąś wskazówkę.


Aktualny efekt:
www.creox.pl/temp/tv.php
wookieb
Kod
if($sValue['time']<time() AND $dzisiaj[$iKey+1]['time']>time())

A klamry to ma ci święty mikołaj wstawić?

Poza tym CO ZA BEZSENS! Wstawiasz w ifa i else TEN SAM kod rozniacy sie tylko jedna linijka.
majestiq
Dobra przerobiłem to całkowicie i działa ...
yoji
po wrzuceniu skryptu na locala, dostaje:
Kod
Parse error: syntax error, unexpected ':' in /public_html/index.php on line 7


co grane? mellow.gif
roobik
Czy na podstawie kodu z pierwszego posta da radę zrobić dwa programy obok siebie?
behu
Da radę.


np. tak:

  1. <?php
  2. include('programtv.php'); # wczytujemy funkcję
  3.  
  4. $program1 = programtv(1, false, date("H:i", (time()-2*3600)).'..23:59');
  5. $program2 = programtv(2, false, date("H:i", (time()-2*3600)).'..23:59');
  6. ?>


w tablicy $program1 jest program 1
w tablicy $program2 jest program 2
teraz tylko pętelka/i i wyświetlone biggrin.gif
roobik
Cytat(collusio)
Da radę.

... laugh.gif ...
Może inaczej. W jaki sposób, na podstawie kodu z pierwszego posta, zrobić dwa programy obok siebie?

//edit
No tak... odpowiedź znalazłem w innym poście winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.