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

Функция 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'");
4b9b3361

Ответ 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.

  1. Если вы сохраняете данные json в базе данных, убедитесь, что для конкретной сортировки столбцов установлено значение "latin1_swedish_ci".