Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] pobieranie danych ze strony file_get_contents
Forum PHP.pl > Forum > PHP
Lejto
Napisałem kod który pobiera dane z pewnej strony wszystko jest ok tylko że na stronie z której pobieram dane jest zwalone kodowanie "krzaczki są".
Czy mogę zmienić kodowanie z poziomu mojego skryptu?

Pozdrawiam
wookieb
http://php.net/iconv
Lejto
ok tylko teraz jaki zestaw znaków, na stronie z której pobieram jest:
Kod
<meta http-equiv="Content-Type" content="text/html;>charset=ISO-8859-2" />

u mnie jest utf-8
i w iconv(); mam
  1. <?php
  2. echo iconv("ISO-8859-2","UTF-8", $pokaz[0]);
  3. ?>

i jest trochę lepiej
wookieb
A może sprecyzujesz sformułowanie "trochę lepiej"?
Lejto
ę, ń działa nie działa ś

to co robię źle?

hallo tongue.gif
nie da się w tym nic zrobić?
wookieb
Zapodaj kod wszystkiego co tam masz.
Lejto
proszę bardzo:
  1. <?php
  2. $ch = curl_init("http://gimnowe.pl/index.php?option=com_content&task=view&id=149&Itemid=83");
  3. curl_setopt($ch, CURLOPT_USERAGENT, "Internet Explorer");
  4.  
  5.  
  6. curl_exec($ch);
  7. curl_close($ch);
  8.  
  9. $str = ob_get_contents();
  10.  
  11. preg_match("/<tbody><tr><td>(.*?)</td></tr>/is", $str, $byname);
  12. preg_match_all("/<tbody><tr><td>(.*?)</td></tr>/is",$byname[0], $data_z);
  13.  
  14.  
  15. $url = 'http://gimnowe.pl/index.php?option=com_content&task=view&id=149&Itemid=83';
  16. $za = file_get_contents($url);
  17.  
  18. preg_match('#<td class="contentheading" width="100%">(.*?)</td>#si', $za, $tyt);
  19. echo $tyt[0];
  20.  
  21.  
  22. $data = array();
  23. for($i = 0; $i < count ($data_z[1]); $i++)
  24. {
  25.    $zmiana = $data_z[1][$i];
  26.    $data []= array($zmiana);
  27. }
  28. foreach ($data as $pokaz)
  29. {
  30.    echo iconv("ISO-8859-2","UTF-8", $pokaz[0]);
  31. }
  32. ?>
wookieb
Ech... Wystarczyło wejść na tą stronę i zobaczyć ze kodowanie jest zwalone. Ale widać jak mało ludzi wie o takiej opcji w przeglądarce (zestaw znaków). Zmien sobie na Windows-1250 (takie też ustaw w kodowaniu źródłowym iconv) i zobaczysz efekt.
Daj jeszcze iconv na tytuł...

Poza tym zastosowanie ob_start jest troche na okretke. Wystarczy dodac do curla opcje RETURNTRANSFER -> wiecej info w manualu
Lejto
wiem że jest kodowanie zwalone na tej stronie zobaczę z windows-1250

ok zrobiłem tak:
  1. <?php
  2. echo iconv("windows-1250","ISO-8859-2", $tyt[0]);
  3. ?>
i działa
ale jeszcze gdy przepuszczam to przez ajaxa i index.html to kodowanie znów się zwana a mam kodowanie ISO-8859-2 ;/
wookieb
A sprawdź kodowanie swojego pliku php i kodowanie strony na ktorej to pokazujesz.
Mephistofeles
AJAX domyślnie bierze UTF-8. Może to jest powodem.
Lejto
wszędzie dałem UTF-8 i działa jak powinno smile.gif
a jest możliwość żeby przejść w ajaxsie na ISO-8859-2?
Mephistofeles
A stosujesz jakąś bibliotekę, czy goły XMLHttpRequest?
Lejto
goły XMLHttpRequest bez biblioteki
Mephistofeles
Próbowałeś może czegoś takiego:
Kod
xmlHttp.overrideMimeType('text/html; charset=windows-1250');

?
Lejto
nie nie próbowałem, jak będzie potrzeba to zobaczę
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.