Json在PHP数组中编码Unicode符号

时间:2019-02-12 10:53:30

标签: php json unicode

给出以下数组

$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 here

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

版本3(添加转义字符)

$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 :(得分:1)

好吧,您已经编写了字符串“反斜杠u f零一五”,并使用JSON编码对其进行了精确保留。周围没有理智的办法。输入所需的实际字符,而不是“ \ uf015”。由于此特定字符的书写可能有些尴尬,因此请以其他替代符号(例如原始UTF-8字节)进行书写:

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

echo json_encode($locationIcon);  // {"code": "\uf015", ...}