讀古今文學網 > 微信公眾平台開發:從零基礎到ThinkPHP5高性能框架實踐 > 23.2 QQ表情和Emoji表情 >

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表情的自定義菜單