如何从字符串提取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);
关键说明
- 正则匹配规则:
/:\w+:/用于匹配所有以冒号包裹、由字母/数字/下划线组成的短名称。如果你的短名称包含连字符,可调整为/:[a-zA-Z0-9_-]+:/。 - 回调函数逻辑:遍历每个匹配到的短码,先验证是否存在于你的
shortcode_replace()映射中,存在则按原有逻辑转换为图片URL并生成<img>标签;不存在则保留原短码。 - 灵活性:如果不需要生成
<img>标签,直接返回图片URL即可,只需修改回调函数的返回值。
内容的提问来源于stack exchange,提问作者Usman Khan
相关产品推荐
相关产品推荐

