微信公衆號使用Emoji表情

看習慣了qq的默認表情,嚐到了漂亮的emoji表情。這個時候,就開始心動了。我要我要回復漂亮的emoji表情。

既然,談到emoji表情,能回覆是必然的。只是方法你尋到了沒。php有點不同,在php中輸出\(斜槓)u開頭的unicode編碼會原樣輸出,所以需要轉換一下(java和c#貌似不用)。

做一個勤快的人,有想法,就得付出心動。在網上都可以找到答案,然後去應證,封裝。最後,就是你的了。

先上一張圖。

emoji表情

emoji表情


在進行代碼編寫之前,先看看柳峯的文章: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還是不行。
應該方法不對吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章