Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Json_encode a polskie znaki
Octobus
post 4.06.2013, 10:30:03
Post #1





Grupa: Zarejestrowani
Postów: 259
Pomógł: 1
Dołączył: 3.07.2011

Ostrzeżenie: (0%)
-----


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 to the top of the page
+Quote Post
-Gość-
post 4.06.2013, 10:33:09
Post #2





Goście







a może spróbuj :



lub

Go to the top of the page
+Quote Post
maniana
post 4.06.2013, 10:42:30
Post #3





Grupa: Zarejestrowani
Postów: 207
Pomógł: 44
Dołączył: 18.05.2007

Ostrzeżenie: (0%)
-----


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));
Go to the top of the page
+Quote Post
Octobus
post 4.06.2013, 11:04:17
Post #4





Grupa: Zarejestrowani
Postów: 259
Pomógł: 1
Dołączył: 3.07.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Crozin
post 4.06.2013, 11:38:36
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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().

Ten post edytował Crozin 4.06.2013, 11:39:35
Go to the top of the page
+Quote Post
Octobus
post 4.06.2013, 12:47:08
Post #6





Grupa: Zarejestrowani
Postów: 259
Pomógł: 1
Dołączył: 3.07.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Crozin
post 4.06.2013, 13:11:49
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.07.2025 - 00:51