今天在做微信小程序开发的时候碰上的问题:emoji表情无法保存。
搜索了一下相关问题,发现是数据库是无法保存emoji表情等特殊字符,只有进行编码解码。
弄了个工具类。
<?php /** * Created by PhpStorm. * User: 老辉辉 * Date: 2017/12/18 * Time: 14:30 */ namespace app\common\util; class HtmlUtil { /** *把用户输入的文本转义,用于保存 * (主要针对特殊符号和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); } /** *解码上面的转义,用于显示 */ function userTextDecode($str){ $text = json_encode($str); //暴露出unicode $text = preg_replace_callback('/\\\\\\\\/i',function($str){ return '\\'; },$text); //将两条斜杠变成一条 return json_decode($text); } }