You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP字符串Emoji提取异常求助:如何正确获取单个Emoji字符?

PHP中正确提取和使用Emoji字符的方法

问题根源

Emoji属于UTF-8编码的多字节字符(比如示例里的🟪就占4个字节),但PHP默认通过$字符串[索引]的方式访问时,是按单字节读取的,这就导致你只拿到了Emoji字符的第一个字节,最终输出乱码。

解决方法

1. 用mb_substr()截取单个Emoji

mb_substr()是PHP专门处理多字节字符串的函数,可以指定编码来正确截取:

<?php
$bod = "🟪🟪";
// 从第0位开始,截取1个UTF-8编码的多字节字符
$c = mb_substr($bod, 0, 1, 'UTF-8');
echo $bod."<br>";
echo $c."<br>"; // 正常输出第一个🟪
?>

2. 转成多字节字符数组再访问

用mb_str_split()把字符串拆成每个元素都是完整多字节字符的数组,之后就能通过索引正常获取:

<?php
$bod = "🟪🟪";
$emojiList = mb_str_split($bod, 1, 'UTF-8');
$c = $emojiList[0];
echo $bod."<br>";
echo $c."<br>"; // 正常输出第一个🟪
?>

3. 遍历所有Emoji字符

如果需要逐个处理字符串里的Emoji,结合mb_strlen()和mb_substr()循环即可:

<?php
$bod = "🟪🟪😀";
$total = mb_strlen($bod, 'UTF-8');
for ($i = 0; $i < $total; $i++) {
    $currentEmoji = mb_substr($bod, $i, 1, 'UTF-8');
    echo $currentEmoji."<br>";
}
?>

额外注意

  • 确保你的PHP文件编码是UTF-8,同时页面输出的HTTP响应头要设置Content-Type: text/html; charset=utf-8,避免整体显示乱码。
  • 所有处理多字节字符的操作,务必指定编码为UTF-8,防止因服务器默认编码不同出问题。

内容的提问来源于stack exchange,提问作者Tom Stewart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 22:30:06