【问题标题】:How to convert Emoji from Unicode in PHP?如何在 PHP 中从 Unicode 转换表情符号?
【发布时间】:2016-02-06 10:41:36
【问题描述】:

我使用这个table of Emoji 并尝试这个代码:

<?php print json_decode('"\u2600"'); // This convert to ☀ (black sun with rays) ?>

如果我尝试将这个\u1F600(笑脸)转换为json_decode,我会看到这个符号——ὠ0

怎么了?如何获得正确的表情符号?

【问题讨论】:

  • 你试过字节表示法吗? echo "\xF0\x9F\x98\x80";可能你的浏览器不能显示这个?
  • 如果您以正确的编码保存 PHP 文件,您也可以只写 print('????');
  • 如果您的问题与使用 MySQL 时如何将它们保存在数据库中有关,您可以将图表集更改为 utfbm4。看看here

标签: php unicode emoji


【解决方案1】:

PHP 5

JSON 的 \u 一次只能处理一个 UTF-16 代码单元,因此您需要编写代理对。对于U+1F600,这是\uD83D\uDE00,它有效:

echo json_decode('"\uD83D\uDE00"');
?

PHP 7

您现在不再需要使用 json_decode,只需使用 \u 和 unicode 文字即可:

echo "\u{1F30F}";
?

【讨论】:

    【解决方案2】:

    除了 Tino 的回答之外,我想添加代码以将 0x1F63C 等十六进制代码转换为 PHP5 中的 unicode 符号,并将其拆分为代理对:

    function codeToSymbol($em) {
        if($em > 0x10000) {
            $first = (($em - 0x10000) >> 10) + 0xD800;
            $second = (($em - 0x10000) % 0x400) + 0xDC00;
            return json_decode('"' . sprintf("\\u%X\\u%X", $first, $second) . '"');
        } else {
            return json_decode('"' . sprintf("\\u%X", $em) . '"');
        }
    }
    

    echo codeToSymbol(0x1F63C); 输出?

    【讨论】:

      猜你喜欢
      • 2015-10-18
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      • 2017-05-27
      • 2012-01-27
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      相关资源
      最近更新 更多