1、公众号中添加带emoji表情的文字
表情代码参考文档:
1)微信Emoji: http://www.tpy10.net/emo/
2)QQ表情:https://blog.csdn.net/lyq8479/article/details/9229631
示例:
weixin.php – 存储公众号回复文案
//存储在lang/weixin.php -- 用户存储微信公众号回复文案
return array(
'welcome' => "Hi,? 欢迎关注? ~[得意]跳跳][转圈][害羞]?"
)
weixinController.php – 微信公众号逻辑处理控制器
//处理event类型消息
private function dealMsgEvent(){
$event = strtolower($this->event);
switch($event){
case 'subscribe'://关注事件
//判断该用户是否已关注过
$oWeixinUser = WeixinUser::where('weixin_id', '=', $this->fromUserName)->first();
//已关注过,更新关注标识
if($oWeixinUser && $oWeixinUser->subscribe_flag == 0){
$oWeixinUser->update(array('subscribe_flag'=>1,'subscribe_time'=>time()));
}
//输入欢迎语
echo $this->endByText(Lang::get('weixin.welcome'));
break;
case 'unsubscribe'://取消关注事件
//判断用户信息是否存在
$oWeixinUser = WeixinUser::where('weixin_id','=',$this->fromUserName)->first();
//更新用户关注标识
if($oWeixinUser){
$oWeixinUser->update(array('subscribe_flag' => 0));
}
break;
case 'click'://关键字点击事件
echo $this->endByText(Lang::get('weixin.expect'));
break;
}
}
/**
* 回复文本信息并保存
* @param $contentStr
* @return string
*/
private function endByText($contentStr){
if($contentStr){
//消息回复
$resultStr = WeixinBaseController::responseText($contentStr,$this->fromUserName,$this->toUserName);
//保存输出信息,记录回复的信息
$this->saveMsgOut($this->fromUserName, $this->toUserName, TIME, 'text', $contentStr);
}else{
$resultStr = '';
}
return $resultStr;
}
/**
* 保存回复的信息(目前只支持文本消息)
*/
function saveMsgOut($ToUserName,$FromUserName,$CreateTime,$MsgType,$Content){
$arr=array(
'ToUserName'=>$ToUserName,
'FromUserName'=>$FromUserName,
'CreateTime'=>$CreateTime,
'MsgType'=>$MsgType,
//转移emoji表情符号,是可以存储到utf8格式的数据库
'Content'=>userTextEncode($Content)
);
DB::table('weixin_msg_out')->insert($arr);
}
global.php – 用户存放可全局使用的公共函数
/**
* 把用户输入的文本转义(主要针对特殊符号和emoji表情)
*/
function userTextEncode($str){
if(!is_string($str))return $str;
if(!$str || $str=='undefined')return '';
$text = json_encode($str); //暴露出unicode
$text = preg_replace_callback("/(\\\u[ed][0-9a-f]{3})/i",function($str){
return addslashes($str[0]);
},$text); //将emoji的unicode留下,其他不动,这里的正则比原答案增加了d,因为我发现我很多emoji实际上是\ud开头的,反而暂时没发现有\ue开头。
return json_decode($text);
}
/**
* 解码 用户输入的文本转义(主要针对特殊符号和emoji表情)
*/
function userTextDecode($str){
$text = json_encode($str); //暴露出unicode
$text = preg_replace_callback('/\\\\\\\\/i',function($str){
return '\\';
},$text); //将两条斜杠变成一条,其他不动
return json_decode($text);
}
注在正则表达式中一个反斜杠需要使用四个反斜杠来匹配:
前两个反斜杠在字符串中被解释为一个反斜杠,后两个也被解释为一个反斜杠,这时解释完毕后变成两个反斜杠,再由正则表达式解释两个反斜杠,就又解释成了一个反斜杠,所以,在正则表达式中要匹配一个反斜杠时,需要四个反斜杠。
emoji表情转义存储参考文档:
https://blog.csdn.net/ufan94/article/details/78615889