看习惯了qq的默认表情,尝到了漂亮的emoji表情。这个时候,就开始心动了。我要我要回复漂亮的emoji表情。
既然,谈到emoji表情,能回复是必然的。只是方法你寻到了没。php有点不同,在php中输出\(斜杠)u开头的unicode编码会原样输出,所以需要转换一下(java和c#貌似不用)。
做一个勤快的人,有想法,就得付出心动。在网上都可以找到答案,然后去应证,封装。最后,就是你的了。
先上一张图。
Emoji表情的分类
Emoji表情有很多种版本,包括Unified、DoCoMo、KDDI、Softbank和Google,而且不同版本的表情代码也不一样,更可恶的是:不同的手机操作系统、甚至是同一操作系统的不同版本所支持的emoji表情又不一样。
所以,完美主义者可以止步了,因为目前emoji表情并不能保证在所有终端上都能正常使用。
庆幸的是,我已经在超过10余部终端上测试过emoji表情的使用,这其中包括iPhone 4S、iPhone 5、Android 2.2、Android 4.0+、Win8、iPad2,只有极个别终端上显示不出来或显示为一个小方格,所以并没有什么太大的影响,也就可以放心使用了!
既然,emoji表情有多种版本,那么使用方法是否一样呢?请先看SoftBank版本emoji表情的使用。
第一,我们要知道表情代码表。这个在柳峰的文章里边有,贴出了图片以及对应的表情代码。上边说过,在php中输出\(斜杠)u开头的unicode编码会原样输出,所以需要转换一下。现在来转换一下。
public function unicode2utf8($str) { $str = '{"result_str":"'.$str.'"}'; //组合成json格式 $strarray = json_decode($str,true); //json转换为数组,利用 JSON 对 \uXXXX 的支持来把转义符恢复为 Unicode 字符(by 梁海) return $strarray['result_str']; }
假如我们要向用户返回一个“草莓”表情,只需要在输出的xml文件中对应的Content值是:
$array['Content'] = $this->unicode2utf8("\ue347");
这个时候,你应该可以看清楚了。”\ue347″就是‘草莓’这个表情的表示代码。上边的unicode2utf8函数,就是将表情代码转换成正常的。其唯一参数就是表情对应的表示代码。
既然知道可以使用了。那么下边,我们可以对这些表情进行封装一下。使得可以实现下边两种功能。
一丶随机的输出一个emoji表情(emoji表情太多,从众多表情中随机的输出一个emoji表情有新鲜感)。
二丶通过中文名字,输出对应的emoji表情(这个与上边的相反。有时候,是需要输出特定的表情)。
为了实现上边这两个功能。我建立了两个数组,一个用来存储emoji表情的表示代码,另一个用来存储emoji表情对应的中文名字(这个名字你觉得怎么贴切就怎么取)。他们的键值是0,1,2,3,4……
这里除了上边的转换函数,还需要两个公开的函数。一个用来输出随机的表情,一个用来输出对应关键字的表情。
说完了,直接贴出封装好的代码。
php class Tool { var $emojiList = array("\ue345","\ue347","\ue33a","\ue33e","\ue33b","\ue338","\ue034","\ue31c","\ue43c","\ue13e","\ue041","\ue03c","\ue307","\ue303","\ue118","\ue032", "\ue110","\ue306","\ue054","\ue522","\ue01a","\ue528","\ue529","\ue52d","\ue04a","\ue04b","\ue425","\ue111","\ue428","\ue03e","\ue00e","\ue14c", "\ue329","\ue32d","\ue107","\ue105","\ue409","\ue106","\ue418","\ue315","\ue30d","\ue138","\ue139"); var $emojiNameList = array("苹果","草莓","甜筒","米饭","薯条","汤","戒指","红唇","伞","高跟鞋","吉他","麦克风","绿树","红花","枫叶","玫瑰","叶子","一束花","海豚","海鱼","马", "猴子","羊","蛇","太阳","雨","爱恋","恋爱","牵手","音乐","赞","肌肉","一箭穿心","紫色的心","恐惧","闭眼吐舌头","吐舌头","色色","飞吻","秘密","祝福","男人","女人"); public function Tool() { } /** * 输出特定的表情 * */ public function getEmoji($str) { $index = array_search($str , $this->emojiNameList); return $this->unicode2utf8($this->emojiList[$index]); } /** * 随机输出表情 * */ public function getRandEmoji() { $len = count($this ->emojiList); return $this->unicode2utf8($this->emojiList[rand(0,$len-1)]); } /** * 在php中输出\(斜杠)u开头的unicode编码会原样输出,所以需要转换一下。(java和c#貌似不用) * */ public function unicode2utf8($str) { $str = '{"result_str":"'.$str.'"}'; //组合成json格式 $strarray = json_decode($str,true); //json转换为数组,利用 JSON 对 \uXXXX 的支持来把转义符恢复为 Unicode 字符(by 梁海) return $strarray['result_str']; } } ?>
上边是SoftBank版本emoji表情的使用,下边说下Unified版本的emoji表情。在代码表中,Unified版本表情是”U+1F604″这样的形式,就是开头两个字符是“U+”,在这里,我们需要将“U+”替换成“0X”,然后给xml的Content。这里就不多说了。
很悲伤的说,php下Unified版本的表情没有试验成功。php将字符从Unicode转化成utf-8还是不行。
应该方法不对吧。