php開發中處理emoji表情和顏文字的相容問題

2021-09-26 10:00:15 字數 894 閱讀 1223

背景:

隨著手機的普及,現在移動開發很火爆,已經遠遠超過了pc端。

在移動裝置經常會發生使用者傳送的內容中包含emoji表情,在顯示時就是亂碼。

一般是因為mysql表設計時,都是用utf8字符集的。把帶有emoji的暱稱字段往裡面insert一下就沒了,整個字段變成了空字串。

這是因為mysql的utf8字符集是3位元組的,而emoji是4位元組,這樣整個暱稱就無法儲存了。

現在介紹在php開發中涉及到emoji表情的三種處理方法:

1)使用utf8mb4字符集

如果你的mysql版本》=5.5.3,你大可直接將utf8直接公升級為utf8mb4字符集

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

至於位元組增大帶來的效能損耗,我看過一些評測,幾乎是可以忽略不計的

2)使用base64編碼

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

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

3)去掉emoji表情

在ios以外的平台上,例如pc或者android。如果你需要顯示emoji,就得準備一大堆emoji並使用第三方前端類庫才行。

emoji表情是個麻煩的東西,即使你能儲存,也不一定能完美顯示,所以我們可以將它過濾掉。

在google裡找到能用的過濾的**,如下:

//

過濾掉emoji表情

function filteremoji($str)

, $str);

return

$str;

}

原文:

PHP處理字元中的emoji表情

目錄 utf 8 編碼的 emoji 表情或者某些特殊字元占用 4 個位元組。utf 8 編碼的常用中文字元占用 3 個位元組。三個 php 內建函式 mixed mb strlen string str string encoding mb internal encoding 返回具有 encod...

php開發中處理emoji表情和顏文字的相容問題

背景 隨著手機的普及,現在移動開發很火爆,已經遠遠超過了pc端。在移動裝置經常會發生使用者傳送的內容中包含emoji表情,在顯示時就是亂碼。一般是因為mysql表設計時,都是用utf8字符集的。把帶有emoji的暱稱字段往裡面insert一下就沒了,整個字段變成了空字串。這是因為mysql的utf8...

php開發中處理emoji表情和顏文字的相容問題

背景 隨著手機的普及,現在移動開發很火爆,已經遠遠超過了pc端。在移動裝置經常會發生使用者傳送的內容中包含emoji表情,在顯示時就是亂碼。一般是因為mysql表設計時,都是用utf8字符集的。把帶有emoji的暱稱字段往裡面insert一下就沒了,整個字段變成了空字串。這是因為mysql的utf8...