wyświetlanie polskich znaków poprzez json_encode

0

Mam prosty skrypt w PHP, który wyświetla mi zawartość w postaci pliku JSON:

echo json_encode($jsonToSend);

Dane pochodzą z bazy SQL. Dalej przetwarza to (fetch()) skrypt JS.

Dlaczego w oknie przeglądarki zamiast "cześć" widzę "cze\u015b\u0107"? Czyli pokazuje mi encje zamiast polskich znaków?
JS również widzi polskie znaki.

0

a masz ustawiony charset=iso-8859-1 ?

0

Rozumiem, że chodzi o php.ini. Tam mam ustawione utf-8.

3

Do json_encode() można przekazać dodatkowy parametr, mianowicie flagi. Jeżeli spojrzysz na listę flag, zobaczysz tam między innymi:

JSON_UNESCAPED_UNICODE (int)
Encode multibyte Unicode characters literally (default is to escape as \uXXXX).

W UTF-8, zarówno ć oraz ś zajmują więcej, niż jeden bajt - ć jest zapisane jako C4 87, zaś ś jako C5 9B - zatem łapią się pod zasadę "by default, escape multibyte Unicode characters as \uXXXX".

0

To dziwne, bo mały test u mnie:

$txt = 'wiśnie ąćźżńó';
$txt2 = json_encode($txt);
echo json_decode($txt2);
die;

i widzę w przeglądarce "wiśnie ąćźżńó", a w źródle HTML to samo, bez escape.

Ja jednak uważam, że OP ma gdzieś ustawione inne kodowanie niż UTF8, do json_encode prawdopodobnie trafia to już z escape-m.

1 użytkowników online, w tym zalogowanych: 0, gości: 1