Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z json_encode() i kodowaniem znaków
Forum PHP.pl > Forum > PHP
blackstone
Zrobiłem sobie skrypt który przetwarza pola formularza w tablicę JSON. Problem w tym że wynik pracy funkcji json_encode() niszczy polskie znaki np w zamiast "ędward ącki " wpisuje mi " \u0118dward \u0104cki ". WYdaje mi sięże to problem z tą funkcja gdyż gdy wydrukowałem sobie tablicę post ( print_r($_POST) ) to w tej tablicy znaki są polskie i nie ma zadnego problemu a język mam nastawiony na polski a kodowanie na tuf8 na stronie czyli <html lang="pl-PL"> i
<head>
<meta charset="utf8" />
</head>

Proszę o sugestię i z góry dzięki za odpowiedź
trueblue
A dlaczego twierdzisz, że niszczy? Próbowałeś odkodować taki ciąg znaków?
blackstone
Próbowałęm funkcją utf8_encode('ciąg JSON z jscon_encode') ale nie było żadnej różnicy.
trueblue
Na pewno nie encode i na pewno nie utf8_encode.
  1. print_r(json_decode('{"0":" \u0118dward \u0104cki "}'));

blackstone
NIe wiem czy dobrze zrozumiemałem , ale............tutaj potrzebne jest uzyskanie danych w formacie >> JSON << ( które uwzględni polskie znaki ) a nie ponownie dekodowanie ich do formatu tablicy php. W tym jest problem.
trueblue
1. Do formatu tablicy ich nie zdekodujesz, bo nie kodowałeś tablicy.
2. Polskie znaki są poprawnie zakodowane.
3. Czytaj dokumentację.

Cytat
Note:
Like the reference JSON encoder, json_encode() will generate JSON that is a simple value (that is, neither an object nor an array) if given a string, integer, float or boolean as an input value.
blackstone
Możliwe że....rzeczywiście problemem nie jest więc json_encode. ALe od początku - owszem kodowałem tablicę. System działa tak że tablica post zawierająca pola z danymi jest zamieniana tablice JSON Tak wiem ,że tablica JSON jeśli nie zostanie zdekodowana przez PHP nie jest obsługiwana jako tablica ale nie o to chodzi , celem jest ciąg JSON tego typu { "pole1": "zawartość " , "pole2" :"zawartość" } . Te ciągi JSON następnie są zapisywane w bazie danych po to by sterować systemem strony. Póki co na razie głównym odbiorcą tego są skrypty php które.....te ciągi JSON z bazy odbierają > następnie dekodują przez json_decode() > następnie używają ( np do sterowania slaiderami ) i....tam gdzie powinny być polskie litery ich nie ma ( po zdekodowaniu przez json_decode() !). Na szczęście ten zapis jest manualny i mogę podmienić ręcznie wygenerowany kod JSON przed zapisem do bazy tak by był tam polskie litery i wtedy działa ok. Tylko to zabiera czas a chciałbym to zrobić z automatu. Najwyżej się przemęczę wypisze sobie przez JSON_encode wszystkie polskie litery i zrobię skrypt który je wstawi w odpowiednie miejsce ale....może można zrobic to prościej jakoś smile.gif
viking
JSON jest zawsze stringiem a nie tablicą. Struktura http://json.org
Twoim problemem jest zapewne brak prawidłowego kodowania przy zapisie do bazy (SET NAMES).
trueblue
W stringu, który podałeś są zakodowane polskie znaki. Fragment kodu PHP, który ja podałem, odkodowuje je poprawnie.
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.