微信昵称在数据库存储处理,解决显示乱码方案
原理:我们先将微信昵称编码存入数据库,显示的时候解码,就可以避免数据库无法直接存储微信昵称中的特殊字符。
一、定义编码解码类
<?php
/**
* Created by PhpStorm.
* User: chen
* Date: 2020/2/18
* Time: 14:35
*/
namespace wechat\lib;
class Emoji
{
//对emoji表情转义
static function encode($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表情转反义
static function decode($str){
$strDecode = preg_replace_callback('|\[\[EMOJI:(.*?)\]\]|', function($matches){
return rawurldecode($matches[1]);
}, $str);
return $strDecode;
}
}
二、使用
// 获取时解码
public function getNameAttr($value)
{
return Emoji::decode($value);
}
// 存储时编码
public function setNameAttr($value)
{
return Emoji::encode($value);
}