2
PHP转义emoji表情,将其存入utf8数据库
Posted by 撒得一地 on 2016年3月18日 in PHP笔记
上一篇: PHP观察者模式
下一篇: PHP7 NULL 合并运算符
下一篇: PHP7 NULL 合并运算符
在做emoji表情处理的时候,要将表情信息存入数据库,由于emoji表情是unicode编码,由4个字节组成的,而Mysql下utf8编码是两个字节,所以没办法将unicode字符串直接存入Mysql。在网上找了一些方法,总结一下可以分为两种情况解决:1.修改Mysql编码 2.将emoji表情进行转义然后存库。
修改Mysql编码
前提:mysql的版本必须为v5.5.3或更高。
把数据库的编码改成utf8mb4,然后将需要存储emoji表情的字段选择为utf8mb4_general_ci类型。要注意数据库连接也需要改为utf8mb4,即set names utf8mb4。
将emoji表情进行转义
方法a:用urlencode函数进行转义,存数据库时给emoji加上标识,取出来的时候重新转换下。
/* 对emoji进行转义 */ function emoji2str($str){ $strEncode = ''; $length = mb_strlen($str,'utf-8'); for ($i=0; $i < $length; $i++) { $_tmpStr = mb_substr($str,$i,1,'utf-8'); if(strlen($_tmpStr) >= 4){ $strEncode .= '[[EMOJI:'.rawurlencode($_tmpStr); }else{ $strEncode .= $_tmpStr; } } return $strEncode; }
/* 读数据后重新转换成emoji返回 */ function str2emoji($str){ $str_arr = explode("[[EMOJI:", $str); $new_str = ""; foreach ($str_arr as $key => $val){ $new_str .= $val; } return $new_str; }
方法b:将emoji表情转换成16进制字符串,取出来的时候转换成10进制字符串。
function hexToStr($hex)//十六进制转字符串 { $string=""; for($i=0;$i<strlen($hex)-1;$i+=2) $string.=chr(hexdec($hex[$i].$hex[$i+1])); return $string; }
特殊情况下,还可以直接过滤掉emoji表情,方法如下:
/** * 过滤emoji表情 * @param type $str * @return type */ function replace_emoji($str){ //暴露出unicode $tmpStr = json_encode($str); //将emoji的unicode留下,其他不动 $tmpStr=preg_replace("#(\ue[0-9a-f]{3})#ie","",$tmpStr); $new_str = json_decode($tmpStr); return $new_str; }
本文固定地址:http://coderschool.cn/1729.html,转载请注明。
上一篇: PHP观察者模式
下一篇: PHP7 NULL 合并运算符
下一篇: PHP7 NULL 合并运算符
2 Comments
技术流
123