Mam skrypt PHP, który obsługuje wiele różnych języków. Niestety, ilekroć próbuję użyć json_encode
, każde wyjście Unicode jest konwertowane na jednostki szesnastkowe. Czy to jest oczekiwane zachowanie? Czy istnieje sposób na przekonwertowanie danych wyjściowych na znaki UTF-8?
Oto przykład tego, co widzę:
WEJŚCIE
echo $text;
WYNIK
База данни грешка.
WEJŚCIE
json_encode($text);
WYNIK
"\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u0438 \u0433\u0440\u0435\u0448\u043a\u0430."
JSON_UNESCAPED_UNICODE jest dostępny w PHP w wersji 5.4 lub nowszej.
Poniższy kod dotyczy wersji 5.3.
AKTUALIZACJA
html_entity_decode
jest nieco wydajniejszy niżpack
+mb_convert_encoding
.(*SKIP)(*FAIL)
pomija ukośniki odwrotne i określone znaki przezJSON_HEX_*
flagi.źródło
\\
. Nowsza wersja ma\\
wyższy priorytet niż\u
.Lubisz ustawiać zestaw znaków i kod Unicode bez zmiany znaczenia
źródło
Jednym z rozwiązań jest najpierw zakodowanie danych, a następnie zdekodowanie ich w tym samym pliku:
źródło
Oto moje połączone rozwiązanie dla różnych wersji PHP.
W mojej firmie pracujemy z różnymi serwerami z różnymi wersjami PHP, więc musiałem znaleźć rozwiązanie działające dla wszystkich.
Kredyty powinny trafić do Marco Gasi i abu . Rozwiązanie dla PHP> = 5.4 znajduje się w dokumentacji json_encode.
źródło
Funkcja raw_json_encode () powyżej nie rozwiązuje mi problemu (z jakiegoś powodu, funkcja zwrotna zgłosił błąd na mój serwer PHP 5.2.5).
Ale to inne rozwiązanie faktycznie zadziałało.
https://www.experts-exchange.com/questions/28628085/json-encode-fails-with-special-characters.html
Kredyty powinny trafić do Marco Gasi . Po prostu wywołuję jego funkcję zamiast wywoływać json_encode ():
źródło
źródło
Ponieważ zapytałeś:
Innym rozwiązaniem jest użycie utf8_encode .
To zakoduje twój ciąg do
UTF-8
.na przykład
źródło
json_encode()
działa tylko z danymi kodowanie UTF-8.może znajdziesz tutaj odpowiedź, żeby ją przekonwertować: cyrylica-znaki-w-phps-json-encode
źródło