在微信的文字內容發送框中有一個笑臉符號,點擊該笑臉後,可以看到下面有很多表情圖標,如圖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表情的自定義菜單