首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拆分表情符号串

拆分表情符号串
EN

Stack Overflow用户
提问于 2020-03-02 02:55:57
回答 3查看 149关注 0票数 2

我想拆分包含表情符号的字符串。我不明白为什么我的函数会生成一个空字符。

代码:

代码语言:javascript
复制
function str_split_unicode($str, $l = 0) {
    if ($l > 0) {
      $ret = array();
      $len = mb_strlen($str, "UTF-8");
      for ($i = 0; $i < $len; $i += $l) {
        $ret[] = mb_substr($str, $i, $l, "UTF-8");
      }
      return $ret;
   }
   return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
}

$emoji_value = "⬜️";
$emoji_split = str_split_unicode($emoji_value,1);

print_r($emoji_split);

结果:

代码语言:javascript
复制
Array
(
    [0] => 
    [1] => ⬜
    [2] => ️
    [3] => 
)

希望天气晴朗。任何帮助都是非常感谢的!

EN

回答 3

Stack Overflow用户

发布于 2020-03-02 03:02:13

尝试添加array_filter以删除空值:

代码语言:javascript
复制
return array_filter(preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY));
票数 1
EN

Stack Overflow用户

发布于 2020-03-02 04:20:01

该字符串有4个字符。第三个是:

代码语言:javascript
复制
echo bin2hex(mb_substr("⬜️", 2, 1, "UTF-8"));

输出:

efb88f

它对应于字符U+FE0F

此代码点可能会更改前面字符的外观。如果这是一个符号、丁巴特或表情符号,U+FE0F会强制它呈现为彩色图像,而不是单色文本变体。

票数 1
EN

Stack Overflow用户

发布于 2020-03-02 04:49:09

我试着根据@Olivier的回复找到一种方法来删除多余的字符。我分享了我的代码,也许这对有人找到解决方案很有用:

代码语言:javascript
复制
<?php
function isStringHasEmojis($string) {
    $emojis_regex =
        '/[\x{0080}-\x{02AF}'
        .'\x{0300}-\x{03FF}'
        .'\x{0600}-\x{06FF}'
        .'\x{0C00}-\x{0C7F}'
        .'\x{1DC0}-\x{1DFF}'
        .'\x{1E00}-\x{1EFF}'
        .'\x{2000}-\x{209F}'
        .'\x{20D0}-\x{214F}'
        .'\x{2190}-\x{23FF}'
        .'\x{2460}-\x{25FF}'
        .'\x{2600}-\x{27EF}'
        .'\x{2900}-\x{29FF}'
        .'\x{2B00}-\x{2BFF}'
        .'\x{2C60}-\x{2C7F}'
        .'\x{2E00}-\x{2E7F}'
        .'\x{3000}-\x{303F}'
        .'\x{A490}-\x{A4CF}'
        .'\x{E000}-\x{F8FF}'
        .'\x{FE00}-\x{FE0F}'
        .'\x{FE30}-\x{FE4F}'
        .'\x{1F000}-\x{1F02F}'
        .'\x{1F0A0}-\x{1F0FF}'
        .'\x{1F100}-\x{1F64F}'
        .'\x{1F680}-\x{1F6FF}'
        .'\x{1F910}-\x{1F96B}'
        .'\x{1F980}-\x{1F9E0}]/u';
    preg_match($emojis_regex, $string, $matches);
    return !empty($matches);
}

function str_split_unicode($str, $l = 0) {
    if ($l > 0) {
        $res = [];      
        $len = mb_strlen($str, "UTF-8");                
        for ($i = 0; $i < $len; $i += $l) {
            $val = mb_substr($str, $i, $l, "UTF-8");
            if(isStringHasEmojis($val)) {
                $res[] = $val;
            }

        }
        return $res;
    }
}

$emoji_value = "⬜️";
$emoji_split = str_split_unicode($emoji_value,1);

echo "<pre>";
print_r($emoji_split);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60478638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档