Json_encode, json_decode и UTF8 - PullRequest
       3

Json_encode, json_decode и UTF8

3 голосов
/ 04 августа 2010

Все,

Я делаю JSON-запрос к веб-серверу, используя PHP, и он возвращает мне JSON-ответ в переменной.Ответ JSON будет иметь много ключей и значений.Ответ JSON, который я получаю с сервера, содержит специальные символы.Поэтому я использую следующий оператор для преобразования его в UTF8, декодирования JSON и использования его в качестве массива для отображения в пользовательском интерфейсе.

$response = json_decode(utf8_encode($jsonresponse));

Теперь я должен передать то же значение на серверзапрос JSON, чтобы сделать некоторые вещи.Однако, когда я передаю

$jsonrequest = json_encode(utf8_encode($request));

на сервер, происходит сбой.

Следующий код успешно читает специальные символы и отображает их в пользовательском интерфейсе.Но происходит сбой, если мне нужно передать значение utf8_encode на сервер.

Текущий весь код туда и обратно такой:относительно того, что я получил от json-ответа от сервера?

Ответы [ 5 ]

7 голосов
/ 05 августа 2010

Ответ JSON, полученный от сервера, содержит специальные символы.Поэтому я использую следующий оператор для преобразования его в UTF8, декодирования JSON и использования его в качестве массива для отображения в интерфейсе пользователя.

Данные JSON уже зашифрованы в UTF-8.Вы не должны конвертировать его в UTF-8 снова;вы испортите данные.

Вместо этого:

$response = json_decode(utf8_encode($jsonresponse));

Вы должны иметь это:

$response = json_decode($jsonresponse); //already UTF-8!
3 голосов
/ 04 мая 2011

Установите это в вашем php-соединении:

$sql = “SET NAMES ‘utf8′”;
mysql_query($sql, $link);
2 голосов
/ 04 августа 2010

вы пробовали переключать места функций?

$jsonrequest = utf8_encode(json_encode($request));

utf8_encode кодирует только строки, а не массивы

1 голос
/ 04 августа 2010

Вы конвертируете начальный запрос в UTF-8, поэтому я предполагаю, что это что-то другое.Но когда вы отправляете данные обратно, вы не конвертируете их обратно в исходную кодировку.

Вы уверены, что отправляете данные в кодировке, ожидаемой сервером?

0 голосов
/ 04 августа 2010

Я также использую строки ZF и utf-8 в вызовах AJAX и считаю, что функции uft8_encode и utf8_decode должны быть устаревшими.

У вас есть действительный метатег

и действительный тип документа

<! DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.01 // EN" «<a href="http://www.w3.org/TR/html4/strict.dtd" rel="nofollow noreferrer">http://www.w3.org/TR/html4/strict.dtd">

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...