V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qiayue
V2EX  ›  PHP

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

  •  2
     
  •   qiayue · 2015-10-15 15:11:28 +08:00 · 8828 次点击
    这是一个创建于 3354 天前的主题,其中的信息可能已经有所发展或是发生改变。
    搜狗输入法中选择笑脸表情后,提交到后端, 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 条回复    2015-10-22 14:34:17 +08:00
    xfspace
        1
    xfspace  
       2015-10-15 15:19:20 +08:00 via Android
    PHP 必须是世界上最好的语言!
    qiayue
        2
    qiayue  
    OP
       2015-10-15 15:27:23 +08:00
    不仅仅是搜狗输入法, iOS 输入法也是一样
    Moker
        3
    Moker  
       2015-10-15 15:49:22 +08:00
    收藏下 最近做的东西可能会用到
    qiayue
        4
    qiayue  
    OP
       2015-10-15 18:58:24 +08:00
    @Livid 突然想到,要是收藏也能使帖子回到首页(俗称被顶起来)就好了
    比如说每收到 5 个收藏就相当于一次评论顶贴

    因为目前的设定,很多人收藏,但是没人回复的帖子就再也没机会被顶起了
    deadEgg
        5
    deadEgg  
       2015-10-15 20:32:39 +08:00
    qiayue
        6
    qiayue  
    OP
       2015-10-15 20:51:11 +08:00
    @deadEgg 我主贴倒数第三个链接就是你发的这个
    cdffh
        7
    cdffh  
       2015-10-16 16:24:17 +08:00   ❤️ 1
    emoji 有两个大坑
    1,存储到数据库要使用 utf8-mb4 才行
    2,导出 excel 的时候会把 phpexcel 搞崩.
    comver
        8
    comver  
       2015-10-22 14:34:17 +08:00
    谢。
    mark.参考。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   990 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:42 · PVG 04:42 · LAX 12:42 · JFK 15:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.