您的位置:首页 > 移动开发 > 微信开发

微信公众号使用Emoji表情

2015-07-22 09:42 1296 查看
看习惯了qq的默认表情,尝到了漂亮的emoji表情。这个时候,就开始心动了。我要我要回复漂亮的emoji表情。

既然,谈到emoji表情,能回复是必然的。只是方法你寻到了没。php有点不同,在php中输出\(斜杠)u开头的unicode编码会原样输出,所以需要转换一下(java和c#貌似不用)。

做一个勤快的人,有想法,就得付出心动。在网上都可以找到答案,然后去应证,封装。最后,就是你的了。

先上一张图。





emoji表情

在进行代码编写之前,先看看柳峰的文章:/article/1339703.html

他那里详细讲解了什么是emoji表情,以及如何使用emoji表情。

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还是不行。

应该方法不对吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: