1.過濾emoji表情的原因
在我們的項目開發中,emoji表情是個麻煩的東西,即使我們可以能存儲,也不一定能完美顯示,因為它的更新速度很快:在iOS以外的平台上,例如PC或者android。如果你需要顯示emoji,就得准備一大堆emoji圖片並使用第三方前端類庫才行。即便如此,還是可能因為emoji圖片不夠全而出現無法顯示的情況
在大多數業務場景下,emoji也不是非要不可的。我們可以適當地考慮干掉它,節約各種成本。
2.php過濾emoji原理
Emoji (絵文字,詞義來自日語えもじ,e-moji,moji在日語中的含義是字符)是一套起源於日本的12x12像素表情符號,由栗田穣崇(Shigetaka Kurit)創作,最早在日本網絡及手機用戶中流行。自蘋果公司發布的iOS 5輸入法中加入了emoji后,這種表情符號開始席卷全球,目前emoji已被大多數現代計算機系統所兼容的Unicode編碼采納,普遍應用於各種手機短信和社交網絡中。近期,更是有不少網友用emoji圖案玩猜字游戲,享受這種表情文化帶來的樂趣。
關於emoji的發音:很多人第一眼見到emoji便會下意識將其誤讀作“一磨嘰”,其實不然,emoji音譯過來大概讀作“誒磨嘰”,當中“e”的發音頗似字母abc的a的發音。
最初日本的三大電信運營商各自有不同的字符定義,分別是DoCoMo、KDDI和Softbank。隨着iOS內置了Softbank的版本,emoji在全球范圍內風靡(iOS5版本以前)。而Google又自己定義了一套emoji字符。iOS5以后,apple采用了unicode定義的emoji字符(iOS5版本以后)。
unicode定義的emoji是四個字符,softbank為3個字符,emoji的四個字符從存儲到展示對應沒有做過考慮的系統來說,簡直就是災難。
3.針對unicode定義的emoji表情過濾
①.unicode定義的emoji是四個字符,根據這個原理進行過濾
②. unicode emoji是4個字節,softbank定義的emoji占用3個字節存儲,通過emoji for php ,我們可以把unicode的emoji方式轉換為softbank方式,從而實現不修改數據庫,就能存儲emoji,相對於數據庫層面的解決問題的方式,動作要小的多,並且也不會有性能,運維等方面的問題。但是有個不可避免的問題是,Softbank方式已經不再維護,所以新增加的emoji表情,Softbank中都沒有,會造成部分emoji表情丟失的情況,對於這種情況不推薦使用。
過濾函數如下:
// 過濾掉emoji表情 function filter_Emoji($str) { $str = preg_replace_callback( //執行一個正則表達式搜索並且使用一個回調進行替換 '/./u', function (array $match) { return strlen($match[0]) >= 4 ? '' : $match[0]; }, $str); return $str; }