【问题标题】:Json encode Unicode Symbol in PHP arrayJson 在 PHP 数组中编码 Unicode 符号
【发布时间】:2019-02-12 10:53:29
【问题描述】:

给定以下数组

$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"}

任何想法我做错了什么?

【问题讨论】:

  • 好吧,您已经编写了字符串“反斜杠 u f 零一五”,并且 JSON 编码将其完全保留为该含义。没有理智的办法。写你想要的实际字符,而不是“\uf015”。
  • 虽然我理解您的意思,但我将如何编写 FontAwesome 图标的“实际”字符?
  • 你想改为序列化吗?

标签: php json unicode


【解决方案1】:

好吧,您已经编写了字符串“反斜杠 u f 零一五”,并且 JSON 编码将其完全保留为该含义。没有理智的办法。写你想要的实际字符,而不是“\uf015”。由于这个特殊的字符写起来可能有点尴尬,所以用另一种表示法来写它,比如原始的 UTF-8 字节:

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

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

【讨论】:

  • 感谢这个工作,但你是如何将\uf015 转换为\xEF\x80\x95 的?
  • 我在 Unicode 表中查找了它。如果你想用纯 PHP 来做,echo bin2hex(json_decode('"\uf015"')); 会有所帮助。
  • 当然,PHP 7 中的 Unicode 转义符号也可以:php.net/manual/en/…
猜你喜欢
  • 2012-03-18
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 2023-03-12
  • 2016-09-19
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
相关资源
最近更新 更多