• 周蓬安.blog的博客—强国博客—人民网 2019-05-10
  • 紫光阁中共中央国家机关工作委员会 2019-05-10
  • 感触名家笔下的端午文化吃香粽原来可以这样文艺 2019-05-09
  • 追梦夺冠游行嘲讽詹皇 百万人面前穿订制T恤羞辱他 2019-04-27
  • 《瘟疫传说》:黑死病恐怖 姐弟在绝望中求生 2019-04-10
  • 陕西国防工业职业技术学院百名大学生志愿者敬老院慰问孤寡老人陕西国防工业职业技术学院百名大学生志愿者敬老院慰问-陕西教育新闻 2019-04-08
  • 西藏拉萨:新家园 新生活 2019-04-08
  • 尊重和保障宗教信仰自由的中国实践 2019-04-06
  • 一敬泯恩仇 俄罗斯队主帅这个动作太暖了 2019-03-20
  • 四大名著剧组首次同台忆往事 经典影视剧如何铸就? 2018-12-07
  • “天眼”凝望 探秘宇宙 2018-12-07
  • 2

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

    Posted by 撒得一地 on 2016年3月18日 in PHP笔记
    国外稳定加速器推荐    Express | Vypr

    在做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;
    }
    

    本文固定地址://www.cfage.com/1729.html,转载请注明。

    上一篇:

    下一篇:

    相关推荐

    2 Comments

    发表评论

    电子邮件地址不会被公开。 必填项已用*标注

    8 + 9 = ?

    网站地图|广东快乐10分开奖直播

    Copyright © 2015-2019 广东快乐10分开奖直播 All rights reserved.
    闽ICP备15015576号-1,版权所有?psz.

  • 周蓬安.blog的博客—强国博客—人民网 2019-05-10
  • 紫光阁中共中央国家机关工作委员会 2019-05-10
  • 感触名家笔下的端午文化吃香粽原来可以这样文艺 2019-05-09
  • 追梦夺冠游行嘲讽詹皇 百万人面前穿订制T恤羞辱他 2019-04-27
  • 《瘟疫传说》:黑死病恐怖 姐弟在绝望中求生 2019-04-10
  • 陕西国防工业职业技术学院百名大学生志愿者敬老院慰问孤寡老人陕西国防工业职业技术学院百名大学生志愿者敬老院慰问-陕西教育新闻 2019-04-08
  • 西藏拉萨:新家园 新生活 2019-04-08
  • 尊重和保障宗教信仰自由的中国实践 2019-04-06
  • 一敬泯恩仇 俄罗斯队主帅这个动作太暖了 2019-03-20
  • 四大名著剧组首次同台忆往事 经典影视剧如何铸就? 2018-12-07
  • “天眼”凝望 探秘宇宙 2018-12-07
  • 江西十一选五走势图 福彩3d走势分布图 pk10前三跨度怎么算 江西多乐彩出号走势图-彩乐乐 福彩777 体彩6+1开奖结果18138 双色球18139期 全年无错杀码公式 群英会彩票走势图 山东十一运夺金开奖走势图 体彩排列3专家杀码预测分析 排列三开奖公告 七乐彩走势图前1000期 天吉彩票论坛双色球预测分析专区 3d试机号分析预测 海南环岛赛彩票开奖