看習慣了qq的默認表情,嚐到了漂亮的emoji表情。這個時候,就開始心動了。我要我要回復漂亮的emoji表情。
既然,談到emoji表情,能回覆是必然的。只是方法你尋到了沒。php有點不同,在php中輸出\(斜槓)u開頭的unicode編碼會原樣輸出,所以需要轉換一下(java和c#貌似不用)。
做一個勤快的人,有想法,就得付出心動。在網上都可以找到答案,然後去應證,封裝。最後,就是你的了。
先上一張圖。
在進行代碼編寫之前,先看看柳峯的文章:http://blog.csdn.net/lyq8479/article/details/9229637
他那裏詳細講解了什麼是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還是不行。
應該方法不對吧。