Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Gubie ogonki przy odczycie ze strumienia
Forum PHP.pl > Forum > Przedszkole
megagame
Witam

Próbuje przez php odczytać plik xml generowany na stronie. Jak otwieram strone przez przeglądarke polskie znaki widzi normalnie. Jak otwieram przez php i echuje nie widać polskich znaków.

Używałem do tego naprawde najróżniejszych funkcji (np. stream_get_contents(...)), w trybie tekstowym i binarnym, i wciąż mam ten sam problem. Próbowałem konwersji ale nadal nic. Najdziwniejsze że widzi mi literę 'ó' a innych nie.

Kod php:
  1. <?php
  2. header('Content-Type: text/xml; charset=ISO-8859-1');
  3.  
  4. $key = "ABQIAAAAgRoZef3TkvvpFfxpf_XfwxSF2OD0fXwtfwCX5T6SnrxKzgMRWRR4G_FccdcRT34uebl
    QSVzRJgXhaA"
    ;
  5. $output = "xml";
  6. $search = "chełmce";
  7.  
  8. $query = "http://maps.google.com/maps/geo?q=".urlencode($search)."&output=".$output."&key=".$key;
  9.  
  10. if ($stream = fopen($query, 'rb')) {
  11. $str = stream_get_contents($stream);
  12. fclose($stream);
  13. }
  14.  
  15. echo $str;
  16. ?>


Dostaje takie coś przy ustawionym kodowaniu ISO-8859-1, przy utf-8 literkę 'ó' zamienia na krzaczory:

[xml]

<kml>
<Response>
<name>che mce</name>

<Status>
<code>200</code>
<request>geocode</request>
</Status>

<Placemark id="p1">
<address>Che mce, Kruszwica gmina, Poland</address>

<AddressDetails Accuracy="4">

<Country>
<CountryNameCode>PL</CountryNameCode>

<AdministrativeArea>
<AdministrativeAreaName>Kujawsko-Pomorskie</AdministrativeAreaName>

<SubAdministrativeArea>
<SubAdministrativeAreaName>Inowroc awski</SubAdministrativeAreaName>

<Locality>
<LocalityName>Kruszwica gmina</LocalityName>

<DependentLocality>
<DependentLocalityName>Che mce</DependentLocalityName>
</DependentLocality>
</Locality>
</SubAdministrativeArea>
</AdministrativeArea>
</Country>
</AddressDetails>

<Point>
<coordinates>18.447999,52.614150,0</coordinates>
</Point>
</Placemark>

<Placemark id="p2">
<address>Che mce, Kowiesy, Poland</address>
<AddressDetails Accuracy="4">
<Country>
<CountryNameCode>PL</CountryNameCode>
<AdministrativeArea>
<AdministrativeAreaName> ódzkie</AdministrativeAreaName>
<SubAdministrativeArea>
<SubAdministrativeAreaName>Skierniewicki</SubAdministrativeAreaName>
<Locality>
<LocalityName>Kowiesy</LocalityName>
<DependentLocality>
<DependentLocalityName>Che mce</DependentLocalityName>
</DependentLocality>
</Locality>
</SubAdministrativeArea>
</AdministrativeArea>
</Country>
</AddressDetails>
<Point>
<coordinates>20.358771,51.893668,0</coordinates>
</Point>
</Placemark>
<Placemark id="p3">
<address>Che mce, Opatówek, Poland</address>
<AddressDetails Accuracy="4">
<Country>
<CountryNameCode>PL</CountryNameCode>
<AdministrativeArea>
<AdministrativeAreaName>Wielkopolskie</AdministrativeAreaName>
<SubAdministrativeArea>
<SubAdministrativeAreaName>Kaliski</SubAdministrativeAreaName>
<Locality>
<LocalityName>Opatówek</LocalityName>
<DependentLocality>
<DependentLocalityName>Che mce</DependentLocalityName>
</DependentLocality>
</Locality>
</SubAdministrativeArea>
</AdministrativeArea>
</Country>
</AddressDetails>
<Point>
<coordinates>18.173290,51.699367,0</coordinates>
</Point>
</Placemark>
<Placemark id="p4">
<address>Che mce, Strawczyn, Poland</address>
<AddressDetails Accuracy="4">
<Country>
<CountryNameCode>PL</CountryNameCode>
<AdministrativeArea>
<AdministrativeAreaName> wi tokrzyskie</AdministrativeAreaName>
<SubAdministrativeArea>
<SubAdministrativeAreaName>Kielecki</SubAdministrativeAreaName>
<Locality>
<LocalityName>Strawczyn</LocalityName>
<DependentLocality>
<DependentLocalityName>Che mce</DependentLocalityName>
</DependentLocality>
</Locality>
</SubAdministrativeArea>
</AdministrativeArea>
</Country>
</AddressDetails>
<Point>
<coordinates>20.491547,50.932411,0</coordinates>
</Point>
</Placemark>
<Placemark id="p5">
<address>Chelmce, Godziesze Wielkie, Poland</address>
<AddressDetails Accuracy="4">
<Country>
<CountryNameCode>PL</CountryNameCode>
<Locality>
<LocalityName>Godziesze Wielkie</LocalityName>
<DependentLocality>
<DependentLocalityName>Chelmce</DependentLocalityName>
</DependentLocality>
</Locality>
</Country>
</AddressDetails>
<Point>
<coordinates>18.160000,51.700000,0</coordinates>
</Point>
</Placemark>
<Placemark id="p6">
<address>Chelmce, Kowiesy, Poland</address>
<AddressDetails Accuracy="4">
<Country>
<CountryNameCode>PL</CountryNameCode>
<Locality>
<LocalityName>Kowiesy</LocalityName>
<DependentLocality>
<DependentLocalityName>Chelmce</DependentLocalityName>
</DependentLocality>
</Locality>
</Country>
</AddressDetails>
<Point>
<coordinates>20.360000,51.900000,0</coordinates>
</Point>
</Placemark>
</Response>
</kml>
[xml]


A teraz najdziwniejsze.
Jeżeli do odebrania wyniku używam fsockopen, moje zapytanie wygląda tak:

  1. <?php
  2. $out = "GET $path HTTP/1.0rn";
  3. $out .= "Host: $hostrn";
  4. $out .= "Referer: <a href="http://fotoidol.comrn";" target="_blank">http://fotoidol.comrn";</a>
  5. $out .= "Accept-Charset: utf-8, unicode-1-1;q=0.8rn";
  6. ?>


Wynik wygląda tak:

HTTP/1.0 200 OK
Cache-Control: private
Last-Modified: Fri, 18 May 2007 11:51:39 GMT
Content-Type: text/javascript; charset=UTF-8; charset=ISO-8859-1
Server: mfe
Date: Fri, 18 May 2007 11:51:39 GMT
Connection: Close

Nie wiem czemu ale dodaje drugi charset:/.

Nic się nie dzieje, nadal błąd i brak polskich liter. Ale gdy dodam kolejną linijkę:

  1. <?php
  2. $out .= "User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.6) Gecko/20050317 Firefox/1.0.2rnrn";
  3. ?>


nagle drugi charset zmienia sie na utf-8 i widzi polskie literki, co jest grane, błąd google??
fiszol
  1. <?php
  2. function plCharset($string) {
  3. $iso2utf = array(
  4. "xb1" => "xc4x85", "xa1" => "xc4x84",
  5. "xe6" => "xc4x87", "xc6" => "xc4x86",
  6. "xea" => "xc4x99", "xca" => "xc4x98",
  7. "xb3" => "xc5x82", "xa3" => "xc5x81",
  8. "xf3" => "xc3xb3", "xd3" => "xc3x93",
  9. "xb6" => "xc5x9b", "xa6" => "xc5x9a",
  10. "xbc" => "xc5xba", "xac" => "xc5xb9",
  11. "xbf" => "xc5xbc", "xaf" => "xc5xbb",
  12. "xf1" => "xc5x84", "xd1" => "xc5x83"
  13. );
  14. return strtr($string, $iso2utf);
  15. };
  16. $str = plCharset($str);
  17. ?>
megagame
Chciałbym żeby to było takie proste, ale google oddaje mi to w iso przy czym usuwa polskie znaki nieodwracalnie, zamienia je na spacje (numerek 32) więc lipa. Ale udało mi sie problem rozwiązać. Do zapytania dodaje:

  1. <?php
  2. $out .= "User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.6) Gecko/20050317 Firefox/1.0.2rnrn";
  3. ?>


i nie ma już problemu, oddaje mi wszystko w utfie. Mimo wszystko dzięki za starania.
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.