Функция json_encode: специальные символы
Элементы массива, содержащие специальные символы, преобразуются в пустые строки при кодировании массива с помощью json_encode:
$arr = array ( "funds" => "ComStage STOXX®Europe 600 Techn NR ETF", "time"=>....);
$json = json_encode($arr);
После кодирования JSON элемент [funds] имеет значение NULL. Это происходит только со специальными символами (авторскими правами, торговыми марками и т.д.), Такими как "ComStage STOXX®Europe 600 Techn NR ETF".
Любые предложения?
Спасибо
UPDATE: это решение проблемы до заполнения массива (все имена берутся из db):
$mysqli->query("SET NAMES 'utf8'");
Ответы
Ответ 1
Ваш вход должен быть закодирован как UTF-8 или ISO-8859-1.
http://www.php.net/manual/en/function.json-encode.php
Потому что, если вы попытаетесь преобразовать массив не-utf8 символов, вы получите 0 в качестве возвращаемого значения.
Начиная с 5.5.0, возвращаемое значение при ошибке было изменено с пустой строки на ЛОЖНОЕ.
Ответ 2
В руководстве для json_encode указано следующее:
Все строковые данные должны кодироваться в кодировке UTF-8.
Таким образом, попробуйте array_map
ping utf8_encode()
в свой массив перед его кодировкой:
$arr = array_map('utf8_encode', $arr);
$json = json_encode($arr);
// {"funds":"ComStage STOXX\u00c2\u00aeEurope 600 Techn NR ETF"}
Для справки рассмотрим различия между тремя примерами этой скрипты. Первый не использует кодировку символов, второй использует htmlentities
, а третий использует utf8_encode
- все они возвращают разные результаты.
Для согласованности вы должны использовать utf8_encode()
.
Документы
Ответ 3
Для меня это работает следующим образом:
# Creating the ARRAY from Result.
$array=array();
while($row = $result->fetch_array(MYSQL_ASSOC))
{
# Converting each column to UTF8
$row = array_map('utf8_encode', $row);
array_push($array,$row);
}
json_encode($array);
Ответ 4
вы должны использовать этот код:
$json = json_encode(array_map('utf8_encode', $arr))
Функция array_map преобразует специальные символы в стандарт UTF8
Ответ 5
Используйте функцию ниже.
function utf8_converter($array)
{
array_walk_recursive($array, function (&$item, $key) {
if (!mb_detect_encoding($item, 'utf-8', true)) {
$item = utf8_encode($item);
}
});
return $array;
}
Ответ 6
вы должны добавить chasset = UTF-8 в метатег и использовать json_encode для специальных символов
$json = json_encode($arr);
Функция json_encode преобразует специальные символы в стандарт UTF8
Ответ 7
Чтобы исправить проблему с особым символом, вам просто нужно сделать 2 вещи
1. mysql_set_charset('utf8');
//установите эту строку поверх вашей страницы, в которой вы используете json.
- Если вы сохраняете данные json в базе данных, убедитесь, что для конкретной сортировки столбцов установлено значение "
latin1_swedish_ci
".