Как json_encode массив с французскими акцентами?

У меня есть элемент массива с французским акцентом ([WIPDescription] => Recette Soupe à lOignon Sans Boeuf US). Данные извлекаются из базы данных (mysql).

Однако, когда я пытаюсь кодировать это как json, используя php, встроенный в json_encode, он генерирует значение null json (сервер OS X: php 5.3.4, json 1.2.1 включен).

На сервере Linux описание отключается после первого символа акцента.

Я пробовал все параметры json_encode без успеха. Какие-либо предложения?

Спасибо.

Related of "Как json_encode массив с французскими акцентами?"

json_encode только хочет utf-8 . В зависимости от вашего набора символов вы можете использовать iconv или utf8_encode перед вызовом json_encode для вашей переменной. Возможно, с array_walk_recursive .

В соответствии с запросом, незавершенный способ изменить массив, с предположениями, что (1) он не содержит объектов, и (2) ключи массива находятся в ascii / нижних границах, поэтому их можно оставить как есть:

 $current_charset = 'ISO-8859-15';//or what it is now array_walk_recursive($array,function(&$value) use ($current_charset){ $value = iconv('UTF-8//TRANSLIT',$current_charset,$value); }); 

Я нашел, что это самый простой способ справиться с этим

 echo json_encode($array, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); 

JSON_PRETTY_PRINT – позволяет читать
JSON_UNESCAPED_UNICODE – правильно кодирует символы
JSON_UNESCAPED_SLASHES – избавляется от косой черты "\"
также обратите внимание, что эти параметры разделяются трубой '|'

Другим решением было бы использовать htmlentities или utf8_encode перед использованием json_encode для передачи закодированного символа

как это:

  $array = array('myvalue' => utf8_encode('ééàà')); return json_encode($array); 

Или используя htmlentities :

  $array = array('myvalue' => htmlentities('ééàà')); return json_encode($array); 
 <? $sql=mysql_query("SELECT * FROM TABLE..."); while($row=mysql_fetch_array($sql)) { $output[]=array_map("utf8_encode", $row); } print(json_encode($output)); mysql_close(); ?> в <? $sql=mysql_query("SELECT * FROM TABLE..."); while($row=mysql_fetch_array($sql)) { $output[]=array_map("utf8_encode", $row); } print(json_encode($output)); mysql_close(); ?> 
 $json = utf8_encode($string); $json = json_decode($json); 

На PHP-документы

Эта функция работает только с кодированными данными UTF-8.