Json кодирует символ Unicode в массиве PHP - PullRequest
0 голосов
/ 12 февраля 2019

Учитывая следующий массив

$locationIcon = array(
    'face' => 'FontAwesome',
    'code' => '\uf015',
    'size' => 75,
    'color' => 'gray',
);

, который кодируется с помощью json_encode, я хотел бы получить такой вывод:

{
    face: 'FontAwesome',
    code: '\uf015',
    size: 75,
    color: 'gray'
}

, но вместо этого я получаю эти результаты:

Версия 1

json_encode($array)
=>
"icon":{"face":"FontAwesome","code":"\\uf2bd","size":40,"color":"gray"}

Версия 2, как видно здесь

json_encode($array, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)
=> 
"icon" {"face":"FontAwesome","code":"\\uf2bd","size":40,"color":"gray"} (same)

Версия 3 (добавить escape-символ)

$locationIcon = array(
    'face' => 'FontAwesome',
    'code' => sprintf('%cuf2bd', 27),
    'size' => 100,
    'color' => 'gray',
);
json_encode($array)
=> 
"icon" {"face":"FontAwesome","code":"\u001buf233","size":40,"color":"gray"}

Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 12 февраля 2019

Итак, вы написали строку «обратная косая черта ноль один пять» и JSON-кодировку, которая сохраняет ее именно в этом смысле.Там нет нормального пути обойти это.Напишите нужный вам символ, а не "\ uf015".Поскольку этот конкретный символ может быть немного неудобным для записи, запишите его в альтернативной записи, например, в необработанных байтах UTF-8:

$locationIcon = [
    'code' => "\xEF\x80\x95",  // U+F015
    ...
];

echo json_encode($locationIcon);  // {"code": "\uf015", ...}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...