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

PHP短信系统:Emoji转HTML十进制实体的转换问题求助

解决方案:将字符串中的Emoji单独转换为HTML十进制实体

直接使用PHP的正则回调功能,精准匹配并转换每个Emoji字符为HTML十进制实体,其他字符保持不变,代码实现如下:

function convertEmojiToHtmlEntities($text) {
    // 匹配主流Emoji的Unicode范围正则
    $emojiRegex = '/[\x{1F600}-\x{1F64F}\x{1F300}-\x{1F5FF}\x{1F680}-\x{1F6FF}\x{1F1E0}-\x{1F1FF}\x{1F900}-\x{1F9FF}\x{1FA00}-\x{1FAFF}\x{2600}-\x{26FF}\x{2700}-\x{27BF}]/u';
    
    return preg_replace_callback($emojiRegex, function($matches) {
        $emoji = $matches[0];
        // 转换为UTF-3BE获取标准Unicode码点
        $utf32 = mb_convert_encoding($emoji, 'UTF-32BE', 'UTF-8');
        $codePoint = hexdec(bin2hex($utf32));
        return "&#{$codePoint};";
    }, $text);
}

// 使用示例
$originalMsg = "hello to you \ud83e\udd2a";
$processedMsg = convertEmojiToHtmlEntities($originalMsg);
// 输出结果:hello to you 🤪
echo $processedMsg;

关键说明:

  • 正则表达式:覆盖了Unicode标准中绝大多数常用Emoji的编码区间,/u修饰符确保PHP按Unicode字符而非字节解析字符串。
  • 编码转换:通过mb_convert_encoding将单个Emoji转为UTF-32大端序编码,保证获取到正确的Unicode码点值。
  • 精准转换:仅对匹配到的Emoji字符做实体转换,普通文本完全保留原格式,满足对接不同服务商的需求。

注意:确保PHP环境已启用mbstring扩展,否则mb_convert_encoding无法正常工作。

内容的提问来源于stack exchange,提问作者Artie Meyer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:40:26