当前位置:首页 > 站长学院 > 建站教程 >

Phpcmsv9文章如何采集过滤Emoji表情

作者:齐鲁建站    发布时间:2020-07-05    阅读:
最近有用户反应,当文章内容含有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,这也不失为一个方法。

QQ客服
QQ客服
陈经理