3

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

function emoji_to_unicode($emoji) {
   $emoji = mb_convert_encoding($emoji, 'UTF-32', 'UTF-8');
   $unicode = strtoupper(preg_replace("/^[0]+/","U+",bin2hex($emoji)));
   return $unicode;
}

用法

$var = ("");
echo  emoji_to_unicode($var);

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

$var = ("");
echo  emoji_to_unicode($var);

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

转换单个表情符号时它工作正常,但转换多个表情符号时不起作用

4

2 回答 2

3

一种方法是遍历 中的每个字符,随时$var转换它。请注意,为了使函数更健壮,您应该只替换 3 个前导零(以免弄乱以 4 开头的值)。这样该函数将适用于所有字符。我还添加了一个检查(使用mb_ord)该字符需要转换,以便它也适用于纯文本:

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";

输出:

U+1F600xU+1F600hello

3v4l.org 上的演示

于 2019-08-11T06:11:27.493 回答
2
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
于 2019-08-11T06:03:49.453 回答