PHP JSON i polskie literki

Lipiec 1, 2011

Obecnie podczas realizacji projektu miałem ciekawy problem. Problem był o tyle ciekawy, że nie wiedziałem co jest źle, natomiast wujek Google też nie dawał zbytnio informacji jak naprawić problem. Mianowicie chodzi o format JSON. Służył w mojej aplikacji do serializacji tablic i przechowywania ich w bazie danych. Normalnie do takiego zadania zaprzęgam serialize()/deserialize(), które są odrobinę szybsze (głównie deserializacja), lecz tym razem potrzebne dane były również wykorzystywane przez kod javascript na stronie i pobierane/wysyłane za pomocą AJAX’a. W takim wypadku JSON wydał mi się najlepszym rozwiązaniem, ale wybór tego formatu przysporzył o ciekawy problem.

Jakie było moje zadziwienie, gdy ujrzałem polskie literki w formacie uXXXX. Sprawdzałem czy może chodzi kodowanie (dokumentacja mówi, że json_encode/json_decode) przyjmuje tekst w kodowaniu UTF-8. Więc wszystko posprawdzałem i pozmieniałem na UTF-8, lecz poprawy nie było. Napisałem krótki kod zamieniający te uXXXX na polskie literki, ale stwierdziłem, że jednak wolne jest takie rozwiązanie i nieeleganckie. No to własną funkcję kodującą tablicę w formacie JSON. No tak. To rozwiązało sprawę, lecz jak będę chciał zakodować obiekt. Przecież projekt jeszcze nie jest zakończony. Z uporem maniaka wpatrywałem się w opis formatu JSON, tekst wejściowy i tekst wyjściowy. Przecież musi istnieć sposób, by to zaczęło działać bez takich cyrków. I w końcu olśniło mnie. Funkcja addslashes() użyta podczas kodowania tablicy rozwiązała problem. Zatem poniższy kod rozwiązuję problem.

$json = addslashes(json_encode());
/* przetwarzanie $json */
$result = json_decode($json);

Dodaj komentarz

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Zmień )

Twitter picture

You are commenting using your Twitter account. Log Out / Zmień )

Facebook photo

You are commenting using your Facebook account. Log Out / Zmień )

Connecting to %s

Follow

Otrzymuj każdy nowy wpis na swoją skrzynkę e-mail.