首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP表情符号转换为unicode,而不是适当地转换多个表情符号

PHP表情符号转换为unicode,而不是适当地转换多个表情符号
EN

Stack Overflow用户
提问于 2019-08-11 05:30:53
回答 2查看 718关注 0票数 3

此函数将表情符号转换为unicode。

代码语言:javascript
运行
复制
function emoji_to_unicode($emoji) {
   $emoji = mb_convert_encoding($emoji, 'UTF-32', 'UTF-8');
   $unicode = strtoupper(preg_replace("/^[0]+/","U+",bin2hex($emoji)));
   return $unicode;
}

用法

代码语言:javascript
运行
复制
$var = ("");
echo  emoji_to_unicode($var);

所以它返回给我,U+1F600问题是,如果我在$var上添加更多的表情符号,它只返回第一个表情符号,例如返回如下:

代码语言:javascript
运行
复制
$var = ("");
echo  emoji_to_unicode($var);

返回给我U+1F6000001F600,当它应该返回U+1F600 U+1F600

它在转换单个表情符号时工作良好,但在转换多个表情符号时却不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-11 06:11:27

这样做的一种方法是对$var中的每个字符进行迭代,并在进行转换时进行转换。请注意,为了使函数更健壮,您应该只替换3个前导零(以免混淆例如以4开头的值)。这样,该函数将与所有字符一起工作。我还添加了一个检查(使用mb_ord),该字符需要转换,因此它也适用于纯文本:

代码语言:javascript
运行
复制
function emoji_to_unicode($emoji) {
    if (mb_ord($emoji) < 256) return $emoji;
    $emoji = mb_convert_encoding($emoji, 'UTF-32', 'UTF-8');
    $unicode = strtoupper(preg_replace("/^[0]{3}/","U+",bin2hex($emoji)));
    return $unicode;
}


$var = ("xhello");
$out = '';
for ($i = 0; $i < mb_strlen($var); $i++) {
    $out .= emoji_to_unicode(mb_substr($var, $i, 1));
}
echo "$out\n";

输出:

代码语言:javascript
运行
复制
U+1F600xU+1F600hello

基于3v4l.org的演示

票数 3
EN

Stack Overflow用户

发布于 2019-08-11 06:03:49

代码语言:javascript
运行
复制
function emoji_to_unicode($emoji) {
   $emoji = mb_convert_encoding($emoji, 'UTF-32', 'UTF-8');
   $unicode = strtoupper(preg_replace("/0{3}1/"," U+1",bin2hex($emoji)));
  return $unicode;
}

$var = ("");
echo  emoji_to_unicode($var); // U+1F600 U+1F600

$var = ("");
echo  emoji_to_unicode($var); // U+1F600 U+1F600 U+1F600
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57447564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档