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