Phpcmsv9文章如何采集过滤Emoji表情
时间: 2021-05-09 12:34:56阅读:0来源:高佰军
Phpcmsv9文章如何采集过滤Emoji表情最近有用户反应,当文章内容含有Emoji表情显得内容不完整、文章被断开了,小编经过检查发现这是V9数据库不支持保存Emoji字符,只要解决掉PHPCMS过滤Emoji表情就可以了,今天就来讲一讲Phpcms v9文章采集过滤Emoji表情的方法。

默认Phpcms v9的Mysql数据库类型为utf8字符集,于是会出现存蓄问题,解决Phpcms v9文章入库Emoji字符的方法,还是得从Mysql入手,有两个方法和大家分享一下。


方法一:将数据库修改未utf8mb4字符集,解决Phpcms v9文章不能保存Emoji字符的问题。


如果你的mysql版本>=5.5.3,你可以尝试直接将utf8直接升级为utf8mb4字符集,数据上不用做转换,基本上不会有丢失。当然,记得设置前尽量先备份好再操作。


这样,4字节的utf8编码可完美兼容旧的3字节utf8字符集,并且可以直接存储Emoji表情,至于字节增大带来的性能损耗,中小项目可以忽视。


方法二:增加Emoj过滤函数,入库前先将数据过滤、避免Phpcms v9文章不能保存Emoji字符。


具体方法:修改Phpcms/libs/functions/extention.func.php文件,加入以下Emoj过滤函数。


//过滤掉Emoji表情 
function filterEmoji($str){
$str = preg_replace_callback(
'/./u',
function (array $match) {
return strlen($match[0]) >= 4 ? '' : $match[0];
},
$str);
 return $str;
}

这一过滤函数的原理是:遍历字符串中的每个字符,如果该字符的长度为4个字节,就将其删除。


或者使用这一函数过滤也可以:


//过滤掉Emoji表情 
function filterEmoji($string){
$regex_emoticons = '/[\x{1F600}-\x{1F64F}]/u';
$clear_string = preg_replace($regex_emoticons, '', $string);
$regex_symbols = '/[\x{1F300}-\x{1F5FF}]/u';
$clear_string = preg_replace($regex_symbols, '', $clear_string);
$regex_transport = '/[\x{1F680}-\x{1F6FF}]/u';
$clear_string = preg_replace($regex_transport, '', $clear_string);
$regex_misc = '/[\x{2600}-\x{26FF}]/u';
$clear_string = preg_replace($regex_misc, '', $clear_string);
$regex_dingbats = '/[\x{2700}-\x{27BF}]/u';
$clear_string = preg_replace($regex_dingbats, '', $clear_string);
return $clear_string;
}

这一过滤函数的原理是:遍历字符串中的字符,判断替换。


之后,修改内容模型文件Phpcms/model/content_model.class.php中的public function add_content函数中,在$id = $modelinfo['id'] = $this->insert($systeminfo,true);数据入库前对content内容过滤:


//过滤中Emoji表情 
$modelinfo['content'] = filterEmoji($modelinfo['content']);

这样把Emoji表情过滤掉。


以上就是关于Phpcms过滤Emoji表情的所有内容,举一反三,类似的方法,还可以使用base64把内容先编码转换保存到数据库,之后在调用的时候再decode,这也不失为一个方法。


打赏

取消

maimaiseo.com

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

Powered by d9xcx.com,感谢从这里开始,精彩与您同在

声明:【注明为本站原创的文章,转载请注明出处与原文地址!本站部分转载文章能找到原作者的我们都会注明,若文章涉及版权请发至邮箱:59818485@qq.com,我们以便及时处理。向本站投稿或需要本站向贵司网站定期免费投稿请加QQ:59818485,微信:15045371827】

  • 联系
    联系
  • 手机
    手机
  • 首页
    首页
  • 价格
    价格
  • 返回顶部
  • 帝玖网络