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

如何使用PHP将字符串中的emoji替换为对应[emoji]格式BBCode

完全可以实现,你只需要把原来的preg_replace换成preg_replace_callback,在回调函数中把匹配到的emoji字符转换为对应的十六进制Unicode编码再拼接BBCode即可,可直接使用如下代码:

$data['message'] = preg_replace_callback(
    // 直接复用你原有验证有效的匹配正则,无需修改
    "/([0-9|#][\x{20E3}])|[\x{00ae}|\x{00a9}|\x{203C}|\x{2047}|\x{2048}|\x{2049}|\x{3030}|\x{303D}|\x{2139}|\x{2122}|\x{3297}|\x{3299}][\x{FE00}-\x{FEFF}]?|[\x{2190}-\x{21FF}][\x{FE00}-\x{FEFF}]?|[\x{2300}-\x{23FF}][\x{FE00}-\x{FEFF}]?|[\x{2460}-\x{24FF}][\x{FE00}-\x{FEFF}]?|[\x{25A0}-\x{25FF}][\x{FE00}-\x{FEFF}]?|[\x{2600}-\x{27BF}][\x{FE00}-\x{FEFF}]?|[\x{2900}-\x{297F}][\x{FE00}-\x{FEFF}]?|[\x{2B00}-\x{2BF0}][\x{FE00}-\x{FEFF}]?|[\x{1F000}-\x{1F6FF}][\x{FE00}-\x{FEFF}]?/u",
    function ($matches) {
        $emoji = $matches[0];
        // 过滤变体选择符,避免影响编码获取
        $emoji = preg_replace("/[\x{FE00}-\x{FEFF}]/u", "", $emoji);
        // 转为小写十六进制Unicode编码
        $code = dechex(mb_ord($emoji, 'UTF-8'));
        return "[emoji]{$code}[/emoji]";
    },
    $data['message']
);

注意事项

  • 代码中使用的mb_ord函数需要PHP 7.2及以上版本支持,如果你使用的PHP版本更低,自行实现单字符转Unicode码点的逻辑替换该函数即可。
  • 如果需要支持多码点组合类emoji(比如带肤色、家庭组合类emoji),只需要调整回调内的编码转换逻辑,遍历每个字符的码点用短横线拼接即可,匹配正则也可按需补充对应范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:06:08