PHP字符串移除emoji字符

Jeff -
PHP字符串移除emoji字符
前言

在做一个电商项目使用微信支付发起订单付款时,遇到遇到因商品描述字段含有 emoji 字符微信接口返回字符集超出UTF-8范围的错误提示。
于是特意在网上查找了些解决方案,有通过正则过滤的,也有通过字符集过滤的,经过权衡我最终在项目中采用的是字符集过滤的方案。

正则过滤方案

解决原理是UTF-8编码长度超过3个字节(一般中文3个字节)的全部替换成空字符串

$str = '平安,喜乐。PA,XL.🍀😀';
$str = preg_replace_callback(
    '/./u',
    function (array $match) {
        return strlen($match[0]) > 4 ? '' : $match[0];
    },
    $str);
echo $str; //平安,喜乐。PA,XL.
字符集过滤方案

先把字符集转由UTF-8转成GBK,再由GBK转成UTF-8,这个过程就会把emoji字符处理掉。

mb_convert_encoding()函数转换后的emoji会变成?符号,需要另外再剔除。iconv()函数的处理效果能比较符合预期,推荐使用。

$str = '平安,喜乐。PA,XL.🍀😀';
$str = mb_convert_encoding($str, 'GBK', 'UTF-8');
$str = mb_convert_encoding($str, 'UTF-8', 'GBK');
echo $str; //平安,喜乐。PA,XL.??

$str = '平安,喜乐。PA,XL.🍀😀';
$str = iconv('UTF-8', 'GBK//IGNORE', $str);
$str = iconv('GBK', 'UTF-8//IGNORE', $str);
echo $str; //平安,喜乐。PA,XL.
参考

PHP正则模式修饰符
特殊字符(包括emoji)梳理和UTF8编码解码原理

特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。

php介绍

PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。

Tags 标签

phpemojigbkutf-8

扩展阅读

加个好友,技术交流

1628738909466805.jpg