Как кодировать массив json с французскими акцентами?


У меня есть элемент массива с французским акцентом ([Описание]=>Recette Soupe à Loignon Без НАС). Данные правильно извлекаются из базы данных (mysql).

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

На сервере Linux описание обрывается после первого символа ударения.

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

Спасибо.

Author: Natkeeran, 2011-08-03

6 answers

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);

});
 16
Author: Wrikken, 2016-07-28 15:22:46

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

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

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

 21
Author: Pete, 2015-05-13 15:45:59

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

Вот так:

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

Или с помощью htmlentities :

   $array = array('myvalue' => htmlentities('ééàà'));
   return json_encode($array);
 9
Author: sdespont, 2013-07-24 14:05:50
<? 

$sql=mysql_query("SELECT * FROM TABLE...");

while($row=mysql_fetch_array($sql))
{
    $output[]=array_map("utf8_encode", $row);
}
print(json_encode($output));
mysql_close();

?>
 4
Author: Mike Bryant, 2013-07-23 14:03:40
$json = utf8_encode($string);

$json = json_decode($json);
 1
Author: Ali Mhamad Slim, 2017-06-28 07:50:52

В соответствии с документами PHP

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

 0
Author: AlienWebguy, 2011-08-03 15:26:53