您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關怎么解決php emoji mysql錯誤的問題的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
php emoji mysql錯誤是因為數據庫不支持表情,其解決辦法是:1、將字符集改為utfmb4;2、將emoji表情轉義,調用時再轉換回去即可。
本文操作環境:Windows7系統、PHP7.1版本、Dell G3電腦
如何解決php emoji mysql 錯誤問題?
制作小程序時有用到把用戶微信名等信息存到數據庫中作為一個練習記錄的參考,但是發現當微信名里面有emoji表情時,這個表情卻無法存入數據庫字段中。之前用的時access數據庫,字段中是可以直接存入表情的。
原因排查:
首先:我測試了一下是不是PHP程序的原因,使用post提交帶有emoji表情的內容,提交的內容是正常的,post里面的內容是有emojin表情的。
接著:試著將這個數據插入數據庫里面。成功插入數據庫后,發現表情變成了?號顯示。
到這里問題基本上就明白了,就是我的數據庫不支持這個表情了。
注意!注意!注意:這是我用sql-front工具運行的結果,但是在PHP程序中運行,可能導致emoji表情后面所有的內容都無法正常存入。如:
【“表情”標題】emoji符號在內容最開頭,插入內容直接為空,
【前面“表情”標題】插入內容為【前面】,
emoji表情及emoji表情后面的內容全部無法正常插入。
解決方法:
方法一:查了網上說是改變數據庫字符集編碼,試著將字符集改為了utfmb4。再插入一條數據看,確實表情被存入數據庫了。
需要注意的是:但是即使改了數據庫的字符集,PHP程序也得相應地更改字符集。要不然還是???。
定義方法為:mysqli_query($conn,"SET NAMES UTF8MB4");
方法二:將emoji表情轉義,調用時再轉換回去。無非就是定義兩個函數,一個轉義,一個反轉義。//emoji轉義
function en_emoji($str){ $en_str=''; $length=mb_strlen($str,'utf-8'); for($i=0;$i=4){ $en_str.=''.rawurlencode($tmp_str).''; }else{ $en_str.=$tmp_str; } } return $en_str; } //反轉義為emoji function de_emoji($str){ $de_str=preg_replace_callback('|(.*?)|',function($matches){ return rawurldecode($matches[1]); },$str); return $de_str; }
使用方法也很簡單,在存入數據庫時對數據進行轉義,讀取顯示時再反轉義即可。
en_emoji($str)后結果為:
讀取顯示時使用de_emoji($str),就可以了。
兩種解決方法比較:
方法一:修改字符集,不僅要修改數據庫,而且還要修改程序代碼。但是怎么說呢,可能以后數據庫都會升級為utf8mb4。
方法二:使用函數的方法,只需要修改程序,不需要動數據庫。兩個函數實現了。但是存在數據庫里面的內容相比就是一些亂碼的感覺。而且當我在寫這篇文章時發現,因為在儲存數據時使用了en_emoji,所以所有的表情都變成了轉義后的代碼,而當我在顯示文章內容時使用反轉義de_emoji,這個時侯我發現我文章中本來想表現的轉義后內容也被反轉義了。可以看到我上面的結果表現我只能用一張圖片代替了。
結語:還是少用emoji表情吧。反正都麻煩,當然如果數據庫是自己做,程序也是自己寫用方法一設置utf8mb4還是比較完美的。但實話說吧,我只是在寫這篇文章時用了轉義函數,寫完就先停用了,省得給我帶來不必要的麻煩。
感謝各位的閱讀!關于“怎么解決php emoji mysql錯誤的問題”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。