php過濾表單輸入的emoji表情

2022-07-30 04:36:15 字數 1777 閱讀 3790

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的發音。

unicode定義的emoji是四個字元,softbank為3個字元,emoji的四個字元從儲存到展示對應沒有做過考慮的系統來說,簡直就是災難。

3.針對unicode定義的emoji表情過濾

①.unicode定義的emoji是四個字元,根據這個原理進行過濾

//

過濾掉emoji表情

function filter_emoji($str),

$str

);

return

$str

; }

②. unicode emoji是4個位元組,softbank定義的emoji占用3個位元組儲存,通過emoji for php ,我們可以把unicode的emoji方式轉換為softbank方式,從而實現不修改資料庫,就能儲存emoji,相對於資料庫層面的解決問題的方式,動作要小的多,並且也不會有效能,運維等方面的問題。但是有個不可避免的問題是,softbank方式已經不再維護,所以新增加的emoji表情,softbank中都沒有,會造成部分emoji表情丟失的情況,對於這種情況不推薦使用。

後續還有一些方法沒有親自實踐過,但是給大家提供出來。

如果你的mysql版本>=5.5.3,你可以嘗試直接將utf8直接公升級為utf8mb4字符集

這種4位元組的utf8編碼可完美相容舊的3位元組utf8字符集,並且可以直接儲存emoji表情,是較好的解決方案之一。

至於位元組增大帶來的效能損耗,根據自己的專案,自己估算吧....

如果你因為某些原因無法使用utf8mb4字符集的話,你還可以使用base64來曲線救國

使用例如base64_encode之類的函式編碼過後的emoji可以直接儲存在utf8位元組集的資料表中,取出時decode一下即可

用JS過濾Emoji表情的輸入

在前端頁面開發過程中,總會碰到不允許輸入框輸入emoji表情的需求,我的思路是通過編碼用正則匹配表情,然後將其替換為空字元創。但是問題也是顯而易見的,完整的編碼集是什麼呢?查閱了官方文件,發現上面並沒有給出想要的答案。並且很多emoji表情除了主編碼還有副編碼 這是我給取的名字 舉個例子 ud83c...

過濾NSString中的Emoji

有時候由於專案需求。要過濾nsstring中的emoji。比方下面情況 思路例如以下,遍歷nsstring每個字元,然後替換成其他字元。列印每個字元 nsrange range for nsinteger i 0 i length i range.length 怎樣推斷composedstring是...

PHP過濾表單字段

php過濾表單字段 函式名釋義 介紹htmlspecialchars 將與 單雙引號 大於和小於號化成html格式 轉成 轉成 轉成 轉成 轉成 htmlentities 所有字元都轉成html格式 除上面htmlspecialchars字元外,還包括雙位元組字元顯示成編碼等。addslashes ...