前端輸入Emoji表情導致的錯誤

用戶輸入了emoji表情,提交的時候因爲後端沒有存儲相應的emoji字符編碼,導致報錯異常。

原因: unicode定義的emoji是四個字符,對於一些之前沒有考慮過emoji表情的系統來說,其獲取或者展示簡直就是災難。公司用的MySQL,其utf8字符集最多支持三個字符。

解決方案

  • 改變MySQL編碼集設置,比如將其編碼從utf8轉換成utf8mb4
  • 前端直接過濾掉emoji,可以用正則實現

正則一:

regemoRule : /\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g, // 表情匹配正則

正則二:

function replaceEmoji (val) {
    var regStr = /[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C-\u3299]\uFE0F\u200D|[\u203C-\u3299]\uFE0F|[\u2122-\u2B55]|\u303D|[\A9|\AE]\u3030|\uA9|\uAE|\u3030/ig;
    var value = val;
    value = unescape(escape(value).replace(/\%uD.{3}/g, ''))
    return value;
};

以上兩種正則方案都是線上採用的方式。

擴展閱讀

字符編碼相關知識(點擊查看)

MySQL設置utf8mb4編碼(點擊查看)

emoji在各個APP中的編碼問題
(點擊查看)

記錄解決emoji表情存入myql數據庫報錯
(點擊查看)

emoji表情特殊字符出錯處理
(點擊查看)

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