У меня есть элемент массива с французским акцентом ([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 без успеха. Какие-либо предложения?
Спасибо.
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.