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