qiayue
V2EX  ›  PHP

使用 PHP 把搜狗输入法输入的 EMOJI 表情转换为 Unified 编码的一个方法

  •  2
     
  •   qiayue ·
    PRO
    · Oct 15, 2015 · 9542 views
    This topic created in 3893 days ago, the information mentioned may be changed or developed.
    搜狗输入法中选择笑脸表情后,提交到后端, json_encode 得到 \ud83d\ude04 。
    如何把 d83dde04 转成标准 emoji 表情代码困扰了我好久,找了好多文章,终于让我找到解决方案了,也许其他人也有需要,所以在这里记录下来。

    关键性参考文章: http://www.bubuko.com/infodetail-1022211.html

    里边推导了一个公式,可以把 0xd83d0xde04 转成 1f604 ,而 U+1F604 就是 Unified 编码的笑脸表情代码。
    文中是 js 的函数,我提取出来了关键几行代码,转成 PHP 代码如下:

    $h = 0xd83d; //高位
    $l = 0xde04; //低位
    $code = ($h - 0xD800) * 0x400 + 0x10000 + $l - 0xDC00; // 转换算法
    echo "U+" . strtoupper(dechex($code));
    //echo 结果是 U+1F604

    另外不同编码方式的转换,参考 http://code.iamcal.com/php/emoji/
    另一些参考网页
    http://computerism.ru/emoji-smiles.htm
    https://github.com/mc-zone/emoji-code
    8 replies    2015-10-22 14:34:17 +08:00
    xfspace
        1
    xfspace  
       Oct 15, 2015 via Android
    PHP 必须是世界上最好的语言!
    qiayue
        2
    qiayue  
    OP
    PRO
       Oct 15, 2015
    不仅仅是搜狗输入法, iOS 输入法也是一样
    Moker
        3
    Moker  
       Oct 15, 2015
    收藏下 最近做的东西可能会用到
    qiayue
        4
    qiayue  
    OP
    PRO
       Oct 15, 2015
    @Livid 突然想到,要是收藏也能使帖子回到首页(俗称被顶起来)就好了
    比如说每收到 5 个收藏就相当于一次评论顶贴

    因为目前的设定,很多人收藏,但是没人回复的帖子就再也没机会被顶起了
    deadEgg
        5
    deadEgg  
       Oct 15, 2015
    qiayue
        6
    qiayue  
    OP
    PRO
       Oct 15, 2015
    @deadEgg 我主贴倒数第三个链接就是你发的这个
    cdffh
        7
    cdffh  
       Oct 16, 2015   ❤️ 1
    emoji 有两个大坑
    1,存储到数据库要使用 utf8-mb4 才行
    2,导出 excel 的时候会把 phpexcel 搞崩.
    comver
        8
    comver  
       Oct 22, 2015
    谢。
    mark.参考。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2922 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 04:54 · PVG 12:54 · LAX 21:54 · JFK 00:54
    ♥ Do have faith in what you're doing.