PHP处理字符中的emoji表情

PHP处理字符中的emoji表情

大家好,又见面了,我是全栈君。

目录

utf-8 编码的 emoji 表情或者某些特殊字符占用 4 个字节。utf-8 编码的常用中文字符占用 3 个字节。

判断字符串中是否含有 emoji 表情

三个 PHP 内置函数:

  • mb_strlen
mixed mb_strlen ( string $str [, string $encoding = mb_internal_encoding() ] )


// 返回具有 encoding 编码的字符串 str 包含的字符数。 多字节的字符被计为 1。
// 如果给定的 encoding 无效则返回 FALSE。
  • mb_substr
string mb_substr ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] )

// 根据字符数执行一个多字节安全的 substr() 操作。 位置是从 str 的开始位置进行计数。 第一个字符的位置是 0。第二个字符的位置是 1。
// mb_substr() 函数根据 start 和 length 参数返回 str 中指定的部分。
  • strlen
int strlen ( string $string )

// 返回给定的字符串 string 的长度。

函数如下:

function haveEmojiChar($str)
{
    $mbLen = mb_strlen($str);
    
    $strArr = [];
    for ($i = 0; $i < $mbLen; $i++) {
        $strArr[] = mb_substr($str, $i, 1, 'utf-8');
        if (strlen($strArr[$i]) >= 4) {
            return true;
        }
    }
    
    return false;
}

移除字符串中的 emoji 表情

函数如下:

function removeEmojiChar($str)
{
    $mbLen = mb_strlen($str);
    
    $strArr = [];
    for ($i = 0; $i < $mbLen; $i++) {
        $mbSubstr = mb_substr($str, $i, 1, 'utf-8');
        if (strlen($mbSubstr) >= 4) {
            continue;
        }
        $strArr[] = $mbSubstr;
    }
    
    return implode('', $strArr);
}

含有 emoji 表情的字符串在 MySQL 中的储存

  1. MySQL 中使用 utf8mb4 字符集。
  2. PHP 对字符串进行 base64 编码,从数据库中取出时再对字符串进行解码。
  3. 直接移除字符串中的 emoji 表情(该方法简单粗暴)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111800.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月14日 下午6:00
下一篇 2022年2月14日 下午7:00


相关推荐

  • 通达信的5分钟数据格式 *.lc5

    通达信的5分钟数据格式 *.lc532字节为单位:CD003F0233330F42-7B14114266660E423D0A1142B02FF64B-A4B20D0000000000>>>struct.unpack(‘hhfffffii’,buf)(205,575,35.799999237060547,36.270000457763672,35

    2022年7月24日
    73
  • 数据包络分析–SBM模型(第一篇)

    数据包络分析–SBMModelDEA–SBMmodel扩充知识–radialandnon-radialSBMmodel模型解释1模型解释2变型对偶模型SBM-efficiencySBMprojectionSBM与CCR作者有话说DEA–SBMmodel扩充知识–radialandnon-radial这里,我们先介绍一个知识,径向与非径向。这两个概念的区别只存在于投入与产出项,看它们是否能按一个比例进行放缩。如果能的话,这个模型便是径向的;反之,则是非径向的。比如说,在第一章

    2022年4月4日
    74
  • js 比java还难_javascript与java哪个难「建议收藏」

    js 比java还难_javascript与java哪个难「建议收藏」javascript与java哪个难?答案是:JavaScript比Java更难。那么这是为什么?下面本篇文章就来给大家介绍一下,希望对大家有所帮助。原因:JavaScript有太多东西需要你自己去理解,这些东西里有很多要么Java已经给你做成范式了,你可以通过学习范式来理解;要么就是根本没有,无需理解。JavaScript需要在语言的基础上再整理一套方法论,这个过程会有不同流派。而Java基本上…

    2022年7月8日
    23
  • 大龄程序员的未来在何方[通俗易懂]

    大龄程序员的未来在何方[通俗易懂]当程序员老去……有人说这是程序员最怕的事,然而,老程序员的将来究竟怎样……

    2022年5月31日
    41
  • GB28181协议–报警

    GB28181协议–报警1 简介根据 GBT28181 2016 公共安全视频监控联网系统信息传输 交换 控制技术要求 9 4 节的 报警事件通知和分发基本要求 描述 发生报警事件时 源设备应将报警信息发送给 SIP 服务器 SIP 服务器接收到报警事件后 将报警信息分发给目标设备 报警事件通知和分发使用 IETFRFC3428 中定义的方法 Message 传送报警信息 源设备包括 SIP 设备 网关 SIP 客户端 联网系统或者综合接处警系统以及卡口系统等 目标设备包括具有接警功能的 SIP 客户端 联网系统或

    2026年3月16日
    3
  • java三元运算符怎么用_按位运算符

    java三元运算符怎么用_按位运算符Java提供了一个三元运算符,可以同时操作3个表达式。三元运算符语法格式如下:判断条件?表达式1:表达式2在上述语法格式中,当判断条件成立时,计算表达式1的值作为整个表达式的结果,否则计算表达式2的值作为整个表达式的结果。三元运算符的功能与if…else语法相同,但是使用三元运算符可以简化代码。例如,求两个数x、y中的较大者,如果用if.else语句来实现,具体代码如下:Intx=0;inty=1;intmax;if(x>y){max=x;}el

    2022年10月20日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号