2013-02-24 3 views
3

Мой PHP скрипт выдает эту строку (например) для JSON:Проблемы с декодированием JSON + PHP

{ "время": "0:38:01", "кто-": "\ u00d3 \ u00e1 \ u00e8 \ u00e2 \ u00f6 \ u00e0 \ u00c3 \ u00e5 \ u00e \ u00e5 \ u00f0 \ u00e0 \ u00eb \ u00ee \ u00e2 "," mess ":" \ u00c5 \ u00e4 \ u00e8 \ u00ed \ u00fb \ u00e9: * mm "}

JQuery код получает эту строку через JSON:

$.getJSON('chat_ajax.php?q=1', 
    function(result) { 
    alert('Time ' + result.time + ' Kto' + result.kto + ' Mess' + result.mess); 
    }); 

Browser шоу:

0:38:01 Óáèâöà Ãåíåðàëîâ 
Åäèíûé: *mm 

Как декодировать эту строку на кириллицу?

Использование Try:

<META http-equiv="content-type" content="text/html; charset=windows-1251"> 

но ничего изменить

PHP код:

$res1=mysqli_query($dbc, "SELECT * FROM chat ORDER BY id DESC LIMIT 1"); 
    while ($row1=mysqli_fetch_array($res1)) { 
     $rawArray=array('time' => @date("G:i:s", ($row1['time'] + $plus)), 'kto' => $row1[kto], 'mess' => $row1[mess]); 
     $encodedArray = array_map(utf8_encode, $rawArray); 
     echo json_encode($encodedArray); 

PHP версии 5.3.19

+1

использование кодировок = UTF-8 – 2013-02-24 20:56:29

+0

Попробуйте Charset = UTF-8, ничего изменить – Ablauf

+0

@Akam Это не UTF-8, окна-1251 является правильным, но он получает отображается в виде окна-1250 –

ответ

2

\uXXXX обозначает юникодом символов и в Юникода 00d3 - Ó и так далее. Символы Unicode - это символы unambigouos, поэтому символьная кодировка страницы игнорируется для них. Вы можете использовать правильный юникод (то есть для У) или написать свой скрипт так, чтобы он выводил реальные символы в Windows-1251 вместо последовательностей unicode.

Update

я вижу из вашего комментария, который вы запрашиваете эти данные из MySQL и использовать json_encode() для вывода его. json_encode работает только для кодированных данных UTF-8 (и d3 - это Ó в UTF-8, поэтому вы получаете неправильные последовательности Unicode).

Таким образом, вам придется конвертировать все данные из Windows-1251 в UTF-8 перед тем проходя его json_encode, то все остальное будет работать нормально.

Преобразование:

$utf8Array = array_map(function($in) { 
    return iconv('Windows-1251', 'UTF-8', $in); 
}, $rawArray); 

utf8_encode не будет работать, потому что это полезно только для входа в ISO-8859-1 кодирования.

Смежные вопросы