PHP 表情符号到 unicode 无法正确转换多个表情符号
PHP emoji to unicode not converting more than one emoji appropriately
此函数将表情符号转换为 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);
所以 return 对我来说 U+1F600
问题是,如果我在 $var
上添加更多表情符号,它只会 return 是第一个表情符号,return 如下:
$var = ("");
echo emoji_to_unicode($var);
return我 U+1F6000001F600
什么时候应该 return U+1F600 U+1F600
转换单个表情符号时正常,但转换多个表情符号时不起作用
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
一种方法是遍历 $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
此函数将表情符号转换为 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);
所以 return 对我来说 U+1F600
问题是,如果我在 $var
上添加更多表情符号,它只会 return 是第一个表情符号,return 如下:
$var = ("");
echo emoji_to_unicode($var);
return我 U+1F6000001F600
什么时候应该 return U+1F600 U+1F600
转换单个表情符号时正常,但转换多个表情符号时不起作用
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
一种方法是遍历 $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