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

如何从字符串提取Emoji短名称并通过自定义函数转为图片

如何批量替换字符串中的Emoji短名称为图片?

我已经实现了单个Emoji短名称转图片的函数(示例中处理:slight_smile:),但不清楚如何从包含多个Emoji短名称的字符串(如Hello How are you :slight_smile::joy:)中提取所有短名称,再通过自定义函数完成批量转换。

单个Emoji短名称处理示例代码

$field_from_db  = ':slight_smile:';
$shortcode_replace = shortcode_replace();
$shortname = $shortcode_replace[$field_from_db]; // 从短码映射中获取Unicode用于生成CDN图片
$shortname = $shortname[0];

echo convertImage($shortname); // 传入Unicode,返回对应Emoji图片的URL

待处理场景

$field_from_db  = 'Hello How are you :slight_smile::joy:';
// 如何将此字符串中的所有短名称转为Emoji图片?

解决方案:使用正则匹配+回调替换

可以通过preg_replace_callback函数,结合正则表达式匹配所有Emoji短名称,再批量调用你的转换逻辑完成替换:

完整实现代码

$field_from_db = 'Hello How are you :slight_smile::joy:';

/**
 * 批量替换字符串中的Emoji短名称为图片标签
 * @param string $text 包含Emoji短名称的原始字符串
 * @return string 替换后的字符串
 */
function replaceEmojiShortcodes($text) {
    // 获取预设的短码-Unicode映射
    $shortcode_map = shortcode_replace();
    
    // 正则匹配所有`:xxx:`格式的Emoji短名称
    return preg_replace_callback('/:\w+:/', function($matches) use ($shortcode_map) {
        $shortcode = $matches[0];
        
        // 检查当前短码是否存在于映射中
        if (isset($shortcode_map[$shortcode])) {
            $unicode = $shortcode_map[$shortcode][0];
            // 调用你的convertImage函数获取图片URL,生成img标签返回
            return '<img src="' . convertImage($unicode) . '" alt="' . $shortcode . '" />';
        }
        
        // 若短码不存在,保留原内容避免破坏字符串
        return $shortcode;
    }, $text);
}

// 执行替换并输出结果
echo replaceEmojiShortcodes($field_from_db);

关键说明

  1. 正则匹配规则:/:\w+:/用于匹配所有以冒号包裹、由字母/数字/下划线组成的短名称。如果你的短名称包含连字符,可调整为/:[a-zA-Z0-9_-]+:/。
  2. 回调函数逻辑:遍历每个匹配到的短码,先验证是否存在于你的shortcode_replace()映射中,存在则按原有逻辑转换为图片URL并生成<img>标签;不存在则保留原短码。
  3. 灵活性:如果不需要生成<img>标签,直接返回图片URL即可,只需修改回调函数的返回值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:18:18