首页 » 微信公众平台开发:从零基础到ThinkPHP5高性能框架实践 » 微信公众平台开发:从零基础到ThinkPHP5高性能框架实践全文在线阅读

《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》23.2 QQ表情和Emoji表情

关灯直达底部

在微信的文字内容发送框中有一个笑脸符号,点击该笑脸后,可以看到下面有很多表情图标,如图23-2所示。使用微信发送信息时,可以发送表情。这些表情包括QQ表情和Emoji表情。

图23-2 微信表情

用户和公众号都能直接发送或回复相应的QQ表情给对方。微信公众号回复QQ表情时,需要回复相应的表情代码,就能发送出相应的表情。这些表情代码被当作文本消息在微信中转义成图标。QQ表情的相应代码如表23-2所示。

表23-2 QQ表情代码列表

另外,还可以使用如下代码进行QQ表情替换,这样如果回复的内容中有相应的词语,就能换成相应的QQ表情。


$face = array('/::)','/::~','/::B','/::|','/:8-)','/::<','/::$','/::X','/::Z','/::/'(','/::-|','/::@','/::P','/::D','/::O','/::(','/::+','/:Cb','/::Q','/::T','/:,@P','/:,@-D','/::d','/:,@o','/::g','/:|-)','/::!','/::L','/::>','/::,@','/:,@f','/::-S','/:?','/:,@x','/:,@@','/::8','/:,@!','/:!!!','/:xx','/:bye','/:wipe','/:dig','/:handclap','/:&-(','/:B-)','/:<@','/:@>','/::-O','/:>-|','/:P-(','/::/'|','/:X-)','/::*','/:@x','/:8*','/:pd','/:<W>','/:beer','/:basketb','/:oo','/:coffee','/:eat','/:pig','/:rose','/:fade','/:showlove','/:heart','/:break','/:cake','/:li','/:bome','/:kn','/:footb','/:ladybug','/:shit','/:moon','/:sun','/:gift','/:hug','/:strong','/:weak','/:share','/:v','/:@)','/:jj','/:@@','/:bad','/:lvu','/:no','/:ok','/:love','/:<L>','/:jump','/:shake','/:<O>','/:circle','/:kotow','/:turn','/:skip','/','/:#-0','/','/:kiss','/:<&','/:&>');$word = array('微笑','伤心','美女','发呆','墨镜','哭','羞','哑','睡','哭','囧','怒','调皮','笑','惊讶','难过','酷','汗','抓狂','吐','笑','快乐','奇','傲','饿','累','吓','汗','高兴','闲','努力','骂','疑问','秘密','乱','疯','哀','鬼','打击','bye','汗','抠','鼓掌','糟糕','恶搞','什么','什么','累','看','难过','难过','坏','亲','吓','可怜','刀','水果','酒','篮球','乒乓','咖啡','美食','动物','鲜花','枯','唇','爱','分手','生日','电','炸弹','刀','足球','虫','臭','月亮','太阳','礼物','伙伴','赞','差','握手','优','恭','勾','顶','坏','爱','不','好的','爱','吻','跳','怕','尖叫','圈','拜','回头','跳','天使','激动','舞','吻','瑜伽','太极');$content = str_replace($face, $word, $message);  

Emoji即表情符号,词义来自日语(えもじ,e-moji,moji在日语中的含义是字符),是由栗田穣崇(Shigetaka Kurit)创建的,目前已普遍应用于网络聊天软件中。Emoji表情的一部分如图23-3所示。

图23-3 Emoji表情

Emoji表情包含多种版本,包括Unified、DoCoMo、KDDI、Softbank及Google。其中,Unified是最官方的版本,也是微信中使用的版本。Emoji表情使用十六进制代码标记,其符号达700多个。各符号名称、含义及其在各种版本下的十六进制代码可以参考官方网站。官网地址为http://www.unicode.org/~scherer/emoji4unicode/。

各图标详细的说明可以从以下地址下载文档。


http:// www.unicode.org/~scherer/emoji4unicode/snapshot/emojidata.pdf  

另外,也可以在下列网站查询。


http:// emoji.fangbei.org/  

在微信公众平台中,公众号回复Emoji表情,不能直接回复代码,需要进行ASCII转码,然后将编码以文本消息回复。十六进制转码代码如下。


function utf8_bytes($cp){    if ($cp > 0x10000){        # 4 bytes        return    chr(0xF0 | (($cp & 0x1C0000) >> 18)).            chr(0x80 | (($cp & 0x3F000) >> 12)).            chr(0x80 | (($cp & 0xFC0) >> 6)).            chr(0x80 | ($cp & 0x3F));    }else if ($cp > 0x800){        # 3 bytes        return    chr(0xE0 | (($cp & 0xF000) >> 12)).            chr(0x80 | (($cp & 0xFC0) >> 6)).            chr(0x80 | ($cp & 0x3F));    }else if ($cp > 0x80){        # 2 bytes        return    chr(0xC0 | (($cp & 0x7C0) >> 6)).            chr(0x80 | ($cp & 0x3F));    }else{        # 1 byte        return chr($cp);    }}  

构造文本消息时,将相应的十六进制作为参数填入转码函数中即可。特别要注意的是,部分表情有两组十六进制代码,如“中国国旗”“美国国旗”。此时需要将两组十六进制代码进行转码后拼接,代码实现如下。


private function receiveText($object){    $keyword = trim($object->Content);    $content = "中国国旗:".utf8_bytes(0x1F1E8).utf8_bytes(0x1F1F3)."/n".             "美国国旗:".utf8_bytes(0x1F1FA).utf8_bytes(0x1F1F8)."/n".             "男女牵手:".utf8_bytes(0x1F46B)."/n".             "仙人掌:".utf8_bytes(0x1F335)."/n".             "电话机:".utf8_bytes(0x260E)."/n".             "药丸:".utf8_bytes(0x1F48A);    $result = $this->transmitText($object, $content);    return $result;}  

上述代码运行后,效果如图23-4所示。

同样的,也可以在自定义菜单中设置一个Emoji表情,增强公众号界面的美观性。其代码实现如下。


require_once('weixin.class.php');$weixin = new class_weixin;$button = array('name' => $weixin->bytes_to_emoji(0x1F4D8)."微信图书",                  'sub_button' => array(                                        array('type' => "view",                                              'name' => "微信开发最佳实践",                                              'url'  => "http:// union.click.jd.com/                                              jdc?d=DoDG82"                                             )                                        )                  );$button = array('name' => $weixin->bytes_to_emoji(0x1F3E0)."购买代码",                  'sub_button' => array(                                        array('type' => 'view',                                              'name' => $weixin->bytes_to_emoji(0x-                                              1F389)."进入购物",                                              'url'  => "http:// mp.weixin.qq.com/                                              bizmall/mallshelf?id=&t=mall/list&biz=                                              MzA5NzM2MTI4OA==&shelf_id=3&showwx                                              paytitle=1#wechat_redirect"                                             ),                                         array('type' => 'view',                                              'name' => $weixin->bytes_to_emoji(0x-                                              1F3AF)."我的订单",                                              'url'  => "http:// info.doucube.com/_                                              fbxxjs/order.php"                                             ),                                         )                  );var_dump($weixin->create_menu($button));  

上述代码运行后,菜单效果如图23-5所示。

图23-4 微信公众号回复Emoji表情

图23-5 带Emoji表情的自定义菜单