猿问

PHP emoji to unicode 没有适当地转换一个以上的 emoji

此函数将表情符号转换为 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


转换单个表情符号时效果很好,但转换多个表情符号时不起作用


慕虎7371278
浏览 187回答 2
2回答

慕的地6264312

一种方法是迭代 中的每个字符,随时$var转换。请注意,为了使函数更健壮,您应该只替换 3 个前导零(以免混淆以 4 开头的值)。这样,该函数将适用于所有字符。我还添加了一个检查(使用mb_ord)该字符需要转换,以便它也适用于纯文本:function emoji_to_unicode($emoji) {&nbsp; &nbsp; if (mb_ord($emoji) < 256) return $emoji;&nbsp; &nbsp; $emoji = mb_convert_encoding($emoji, 'UTF-32', 'UTF-8');&nbsp; &nbsp; $unicode = strtoupper(preg_replace("/^[0]{3}/","U+",bin2hex($emoji)));&nbsp; &nbsp; return $unicode;}$var = ("😀x😀hello");$out = '';for ($i = 0; $i < mb_strlen($var); $i++) {&nbsp; &nbsp; $out .= emoji_to_unicode(mb_substr($var, $i, 1));}echo "$out\n";输出:U+1F600xU+1F600hello

慕的地8271018

function emoji_to_unicode($emoji) {&nbsp; &nbsp;$emoji = mb_convert_encoding($emoji, 'UTF-32', 'UTF-8');&nbsp; &nbsp;$unicode = strtoupper(preg_replace("/0{3}1/"," U+1",bin2hex($emoji)));&nbsp; return $unicode;}$var = ("😀😀");echo&nbsp; emoji_to_unicode($var); // U+1F600 U+1F600$var = ("😀😀😀");echo&nbsp; emoji_to_unicode($var); // U+1F600 U+1F600 U+1F600
随时随地看视频慕课网APP
我要回答