相關資料
PHP處理微信中帶Emoji表情的消息發送和接收(Unicode字符轉碼編碼)
遇到的問題
項目中有個 H5頁面 聊天模塊,當用戶輸入 emoji表情符時,插入數據表時報錯
incorrect string value: '\xF0\x9F\x98\x84' for column 'content' at row 1
數據庫/數據表/表字段 的字符集為 utf8_general_ci,根據上面的“相關資料”,需要做些如下處理:
1、把 PHP 連接 MySQL 的字符集 由 utf8 改為 utf8mb4;
ThinkPHP框架中,改下 配置文件 /ThinkPHP/Conf/convention.php 的 DB_CHARSET 為 utf8mb4 (默認為 utf8);
2、把 聊天記錄表的 聊天內容字段的 字符集改為 utf8mb4_general_ci;
注意:數據庫、數據表 的字符集都不用改,只改 聊天內容字段 即可!
產生的結果
1、數據表能正常存儲 emoji表情;
2、微信(瀏覽器)的 蘋果版 可以輸入和顯示 emoji表情,而 安卓手機輸入時,亂碼,但可以顯示部分的 由蘋果手機輸入的 emoji表情;
3、在 最新的 PC 端的 Chrome 56 瀏覽器上,可以 正常輸入和顯示 emoji表情;
總結
平常新建數據庫時,選擇字符集 utf8mb4_general_ci
: