Mysql 5.5之前的資料庫,預設是 UTF-8,而非 utf8mb4 (Mysql 5.5以後才開始支援)。所以如果user使用iPhone表情符號輸入文檔,當UTF-8編碼碰到新式的表情符號,就會出現儲存的問題,甚致造成文章容易斷編殘缺。

解決辦法有兩個,

第一個是升級Mysql到5.5,然後更新編碼為 utf8mb4 。詳情請看 http://blog.51cto.com/suifu/1853864

第二個方法,在升級有困難的狀況下,過濾掉文章裏的Emoji編號,再儲存。本篇就是介紹第二種方法。操作環境是PHP

本篇是從https://medium.com/coding-cheatsheet/remove-emoji-characters-in-php-236034946f51    其實原來只要一個function就可以了,不過我把它改成物伴Object型式,用class包起來。因為用物件來操作靈活,只要其他的fucntion有宣告global $emoji 。就可以輕鬆的用$emoji帶入其他function裏面,更為方便。

class Remove_Emoji{

function remove_emoji($string=null) {

// Match Emoticons
$regex_emoticons = '/[\x{1F600}-\x{1F64F}]/u';
$clear_string = preg_replace($regex_emoticons, '', $string);

// Match Miscellaneous Symbols and Pictographs
$regex_symbols = '/[\x{1F300}-\x{1F5FF}]/u';
$clear_string = preg_replace($regex_symbols, '', $clear_string);

// Match Transport And Map Symbols
$regex_transport = '/[\x{1F680}-\x{1F6FF}]/u';
$clear_string = preg_replace($regex_transport, '', $clear_string);

// Match Miscellaneous Symbols,實測後不會影響資料庫,故先取消這項
//$regex_misc = '/[\x{2600}-\x{26FF}]/u';
//$clear_string = preg_replace($regex_misc, '', $clear_string);

// Match Dingbats,實測後不會影響資料庫,故先取消這項
//$regex_dingbats = '/[\x{2700}-\x{27BF}]/u';
//$clear_string = preg_replace($regex_dingbats, '', $clear_string);

return $clear_string;
}
}

要使用的話,先建立新物件
$remoji = new Remove_Emoji;

假設有一篇文字如
$str = "聽見了👂👂👂";

想要清除Emoji的話,就這麼辦
$str = $remoji->remove_emoji($_POST['nickname'])

此時 $str 就會變成 "聽見了"

arrow
arrow
    全站熱搜

    Chung 發表在 痞客邦 留言(2) 人氣()