在 Laravel 中使用 emoji 表情

overtrue發表於2017-07-22

file
emoji 在生活中已經無處不見,微信暱稱大把的都在用 emoji,那麼在 Laravel 中如何對它進行正確的使用呢?

首先要了解一點基礎知識:

emoji 基本在各平臺都有預設支援,但是都是基於 unicode 的,比如 “?”,它並不是圖片,在不同的系統平臺可能還不一樣。

我們在網頁裡看到的 emoji 不一定是 unicode,因為我們可以用圖片來代替,這樣可以達到全平臺一致的表現。

首先在 Laravel 中我們要支援 emoji 第一步,資料庫字符集得為 utf8mb4,它是支援 emoji unicode 的字符集,比如我們要儲存微信使用者的暱稱。

另外一種是對使用者輸入內容的 emoji 短標記支援,比如 “:smile:” 代表 ?,“+1” 代表 “?” 等,更多短名稱或者叫短標記。你可以從這裡找到:Emoji cheat sheet for GitHub, Basecamp and other services。

那我們希望使用者輸入的這種標記轉換成 emoji 表情展示就得需要做一些程式碼轉換了。

這裡推薦使用我寫的一個 laravel 擴充包:overtrue/laravel-emoji。它基於 emojione/emojione。為我們提供了比較方便的 API 來在各種 emoji 展示方式間轉換。

Emoji::toImage(':smile:'); // <img class="emojione" alt="&#x1f604;" title=":smile:" src="https://cdn.jsdelivr.net/emojione/assets/3.1/png/32/1f604.png"/>'
Emoji::toShort('?'); // :smile:
Emoji::shortnameToUnicode(':smile:'); // ?

// using helper
// default transform shorname to unicode, you can change it in config file.
emoji(':smile:'); // ?

// access emoji services, return \Emojione\Client instance.
app('emoji');
// or 
app(\Emojione\Client::class);

更多使用請參考:overtrue/laravel-emoji

我還造了很多實用的輪子,有興趣去我的個人主頁看看。別忘記了 star 哦。

相關文章