Подтвердить что ты не робот

Как 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 без успеха. Любые предложения?

Спасибо.

4b9b3361

Ответ 1

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

});

Ответ 2

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

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

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

Ответ 3

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

вот так:

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

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

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

Ответ 4

<? 

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

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

?>

Ответ 5

В PHP docs

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

Ответ 6

$json = utf8_encode($string);

$json = json_decode($json);