Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z kodowaniem ś,ź,Ś,Ź
Forum PHP.pl > Forum > PHP
markuz
Witam,

Pobieram dane z JSON`a który jest teoretycznie kodowany w UTF-8 ale i tak nie ma w nim polskich znaków. Teraz chciałbym w jakiś magiczny sposób aby polskie znaki się pojawiły. Próbowałem z iconv i różnymi "mixami" kodowania ale bez skutecznie. Potem użyłem zwykłej podmiany gdzie ręcznie wstawiłem znaki które mnie interesują.

Problem jest jedynie ze znakami ś,ź,Ś,Ź które reprezentuje znak "�".

  1. function f($s) {
  2. $chars = array(
  3. 'ł' => 'ł',
  4. 'š' => 'ą',
  5. 'ń' => 'ń',
  6. '�' => 'ś', // nie dziala
  7. 'Ż' => 'Ż',
  8. 'ę' => 'ę',
  9. 'Ł' => 'Ł',
  10. '�' => 'Ś', // nie dziala
  11. 'ć' => 'ć',
  12. 'ż' => 'ż',
  13. '�' => 'ź', // nie dziala
  14. );
  15.  
  16. foreach($chars as $from => $to) {
  17. $s = str_replace($from, $to, $s);
  18. }
  19.  
  20. return $s;
  21. }


Jakieś pomysły?
phpion
Może Twój plik, którym obrabiasz tego JSONa ma skopane kodowanie? Nie szukałbym sposobu na obejście problemu z kodowaniem, a jego wyeliminowanie.
markuz
Kodowanie jest popsute w samym json`ie - jednak nie mogę go utworzyć od nowa z dobrym kodowaniem itp. mam po prostu plik który muszę obrobić.
PrinceOfPersia
a skąd idą dane do tego JSONa? Może problem jest na poziomie bazy danych?
markuz
Ten JSON jest konwertowany z shp do geojson za pomocą ogr2ogr np. "ogr2ogr -f GeoJSON output.geojson input.shp"
PrinceOfPersia
nie wiem czy to coś zmieni, ale tu coś piszą o opcjach kodowania ogr2ogr: https://github.com/nvkelso/natural-earth-vector/issues/89
phpion
Może to okaże się pomocne:
http://gis.stackexchange.com/questions/159...latin1-to-utf-8
markuz
Już próbowałem metodami wyżej wymienionymi niestety nic to nie dało - dlatego przyjąłem, że łatwiej będzie rozkodować te znaki w php.
freewalker
a gdyby tak przekonwertować znaki na odpowiedniki ASCII? Tylko, że jak w wyniku JSON dostajesz już skopane kodowanie a nie możesz się dobrać do źródła, to nie wiem czy coś zdziałasz.

http://www.coreblog.pl/tabela-kodow-ascii-...ch-znakow-html/
jackraymund
Najpierw sprawdź kodowanie znaków.
Bierzesz ciąg, w którym znajduje się polski znak bin2hex.
Wtedy jeden znak powinien zawierać 2 bity/bajty.
Tutaj masz zbiór popularnych kodowań. http://pl.wikipedia.org/wiki/Kodowanie_polskich_znak%C3%B3w
I dobierasz polski znak do tego z # np. #EA.
No to kodowanie mamy, to teraz iconv ("ze znalezionego kodowania", "UTF-8//TRANSLIT",$string)
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.