2

PHP转义emoji表情,将其存入utf8数据库

Posted by 撒得一地 on 2016年3月18日 in PHP笔记

在做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,转载请注明。

上一篇:

下一篇:

相关推荐

2 Comments

Comments are closed. Would you like to contact the author directly?
网站地图|XML地图

Copyright © 2015-2024 技术拉近你我! All rights reserved.
闽ICP备15015576号-1 版权所有©psz.