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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JavaScript onmousemove 事件

    JavaScript onmousemove 事件DefinitionandUsage定义与用法Theonmousemoveeventoccurswhenthemousepointerismoved.当鼠标移动时触发onmou

    2022年7月2日
    22
  • 安卓中activity的生命周期_产品生命周期五个阶段

    安卓中activity的生命周期_产品生命周期五个阶段Android系统根据生命周期的不同阶段唤起对应的回调函数来执行代码。系统存在启动与销毁一个activity的一套有序的回调函数。本节来讨论下不同生命周期的回调函数里都该做哪些事情,不该做哪些事情。理解生命周期的回调在一个activity的生命周期中,系统会像金字塔模型一样去调用一系列的生命周期回调函数。Activity生命周期的每一个阶段就像金字塔中的台阶。当系统创建了一个新的activity实例

    2022年8月16日
    7
  • 这些年我是如何在知乎安稳引流不被封号的

    这些年我是如何在知乎安稳引流不被封号的

    2021年6月10日
    106
  • DjangoRestFramework序列化完整图片url

    DjangoRestFramework序列化完整图片urlDRF图片默认序列化目录格式一般为media/xxx.png,但这不是url,没法直接访问,在前端还需要进行一次字符串拼接,十分麻烦。serializer=CategorySerializer(category)returnResponse(serializer.data,status=status.HTTP_200_OK)如上面的代码,此时如果CategorySerializ…

    2022年9月22日
    6
  • HDU 1556-差分数组和线段树的对比分析-Color the ball

    HDU 1556-差分数组和线段树的对比分析-Color the ball差分数组数据结构详解戳这里!线段树数据结构详解戳这里!这两个数据结构的操作主要有两个:更新和查询。假设数据结构总长度为n。差分数组:更新时间复杂度O(1)查询时间复杂度O(n)线段树:更新时间复杂度O(logn)查询时间复杂度O(logn)因此,差分数组适用于多次更新,常量次查询,数据范围在1e7以内的情况;线段树适用于多次更新,多次查询,数据范围在1e5以内的…

    2022年5月7日
    51
  • java 取当前时间年月日_Java获取当前时间年月日的方法[通俗易懂]

    java 取当前时间年月日_Java获取当前时间年月日的方法[通俗易懂]本文实例为大家分享了java获取当前时间年月日的具体代码,供大家参考,具体内容如下importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;publicclassDateTest{publicstaticvoidmai…

    2025年9月7日
    6

发表回复

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

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