Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Json_encode a polskie znaki
Forum PHP.pl > Forum > Przedszkole
Octobus
Witam,

Mam określone dane (tablica wielowymiarowa) które są przez skrypt pobierane z zewnętrznego serwera. Zapisuje dane za pomoca:
  1. addslashes(json_encode($paczka))

a później za kolejnymi razami po odświeżeniu odczytuje z bazy:
  1. json_decode(stripslashes($cache), TRUE)


addslashes powoduje tutaj problem, dodaje to ze wzgledow bezpieczenstwa bo dane wejsciowe moga byc rozne, ale po zapisie gdy zapisuje np taki ciag zankow ę€óąśłżźćń otrzymuje w bazie danych \u0119\u20ac\u00f3\u0105\u015b\u0142\u017c\u017a\u0107\u0144 wiec jak odczytam to z bazy danych usunie mi \ i otrzymam zamiast odkodowanych polskich liter u0119u20acu00f3u0105u015bu0142u017cu017au0107u0144 czyli kompletnie nie to co chcialem ;/

Macie moze jakis pomysl jak to ominac ?;/
Gość
a może spróbuj :



lub

maniana
Rozwiązanie problemu na szybko:
  1. $ustr = array('\u0104','\u0106','\u0118','\u0141','\u0143','\u00d3','\u015a','\u0179','\u017b','\u0105','\u0107','\u0119','\u0142','\u0144','\u00f3','\u015b','\u017a','\u017c');
  2. $plstr = array('Ą','Ć','Ę','Ł','Ń','Ó','Ś','Ź','Ż','ą','ć','ę','ł','ń','ó','ś','ź','ż');
  3.  
  4. $json = str_replace($ustr,$plstr,json_encode($string));
Octobus
Dzięki, czegos takiego szukalem, dodalem tylko sobie jeszcze znak € jako \u20ac oraz rozpisalem to tak:
  1. json_decode(stripslashes(str_replace($ustr,$plstr,$cache)), TRUE);

i jest wszystko ok smile.gif
Crozin
Po co korzystasz z add/stripslashes? Przed żadnymi niebezpieczeństwami ono nie chroni tutaj. Zapis \uXXXX jest jak najbardziej poprawny i json_decode poprawnie go zinterpretuje jako odpowiedni znak Unikodu. Po prostu zapisuj i odczytuj dane do/z bazy poprawnie (z ukośnikami) i żadnego problemu nie będzie. Chyba, że chcesz dla pozostałych ~60 tys znaków tworzyć sobie regułkę dla str_replace().
Octobus
Czyli wywalic cale add/stripslashes ? W sumie nie pamietam dla czego z tego skorzystalem bo ta aplikacje juz dawno temu napisalem ale wydawalo mi sie ze przy insertach do mysql powinny byc ...
Dla czego dla wszystkich ~60 tys znakow ? tylko polskie litery nie dzialaja, nie bede uzywal chinskich ;p
Crozin
1. MySQL z którego prawdopodobnie korzystasz od 2004 roku wspiera prepared statements. W tym samym roku w PHP pojawił się sterownik MySQLi, a w 2006 PDO, które umożliwiają korzystanie z nich. Jakim cudem w 2013, ktoś nadal ręcznie "klepie inserty"?
Cytat
Dla czego dla wszystkich ~60 tys znakow ? tylko polskie litery nie dzialaja, nie bede uzywal chinskich ;p
Nie zadziała Ci nic poza kilkudziesięcioma podstawowymi znakami. Pojawi Ci się niemiecki umlaut, albo inny francuski ogonek i całość się rypie.
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.