Функция json_encode: специальные символы

Элементы массива, содержащие специальные символы, преобразуются в пустые строки при кодировании массива с помощью json_encode:

$arr = array ( "funds" => "ComStage STOXX®Europe 600 Techn NR ETF", "time"=>....); $json = json_encode($arr); 

После кодирования JSON элемент [funds] имеет значение NULL. Это происходит только со специальными символами (авторскими правами, торговыми марками и т. Д.), Такими как «ComStage STOXX®Europe 600 Techn NR ETF».

Какие-либо предложения?

благодаря

ОБНОВЛЕНИЕ: Это решение проблемы до заполнения массива (все имена берутся из db):

 $mysqli->query("SET NAMES 'utf8'"); 

Ваш вход должен быть закодирован как UTF-8 или ISO-8859-1.

http://www.php.net/manual/en/function.json-encode.php

Потому что, если вы попытаетесь преобразовать массив не-utf8 символов, вы получите 0 в качестве возвращаемого значения.

В руководстве для json_encode указано следующее:

Все строковые данные должны кодироваться в кодировке UTF-8.

Таким образом, попробуйте array_map ping utf8_encode() в ваш массив, прежде чем вы его кодируете:

 $arr = array_map('utf8_encode', $arr); $json = json_encode($arr); // {"funds":"ComStage STOXX\u00c2\u00aeEurope 600 Techn NR ETF"} 

Для справки рассмотрим различия между тремя примерами этой скрипки . Первый не использует кодировку символов, второй использует htmlentities а третий использует utf8_encode – все они возвращают разные результаты.

Для согласованности вы должны использовать utf8_encode() .

Документы

  • json_encode ()
  • utf8_encode ()
  • array_map ()

вы должны использовать этот код:

 $json = json_encode(array_map('utf8_encode', $arr)) 

Функция array_map преобразует специальные символы в стандарт UTF8

Для меня это работает так:

 # Creating the ARRAY from Result. $array=array(); while($row = $result->fetch_array(MYSQL_ASSOC)) { # Converting each column to UTF8 $row = array_map('utf8_encode', $row); array_push($array,$row); } json_encode($array); 

Чтобы исправить проблему с особым символом, вам просто нужно сделать 2 вещи

1. mysql_set_charset('utf8'); // установите эту строку поверх вашей страницы, в которой вы используете json.

  1. Если вы сохраняете данные json в базе данных, убедитесь, что для конкретной сортировки столбцов установлено значение « latin1_swedish_ci ».

вы должны добавить charset = UTF-8 в метатег и использовать json_encode для специальных символов

$json = json_encode($arr);

Функция json_encode преобразует специальные символы в стандарт UTF8