最近有用户反应,当文章内容含有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,这也不失为一个方法。
免责声明:本网站内容主要来自原创、合作伙伴供稿和第三方自媒体作者投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。任何单位或个人认为本网站中的网页或链接内容可能涉嫌侵犯其知识产权或存在不实内容时,应及时向本网站提出书面权利通知或不实情况说明,并提供身份证明、权属证明及详细侵权或不实情况证明。本网站在收到上述法律文件后,将会依法尽快联系相关文章源头核实,沟通删除相关内容或断开相关链接。