将表情符号转换为十六进制代码
convert emoji to their hex code
我正在尝试检测我通过的表情符号,例如a POST(不需要来源)。
举个例子,我正在使用这个表情符号:✊(我希望它是可见的)
它的代码是 U+270A U+1F3FE
(我使用 http://unicode.org/emoji/charts/full-emoji-list.html 作为代码)
现在我用 json_encode 转换了表情符号,我得到:\u270a\ud83c\udffe
这里唯一相等的部分是270a
。 \ud83c\udffe
不等于 U+1F3FE
,即使我将它们加在一起 (1B83A
)
如何使用例如从 ✊ 到 U+270A U+1F3FE
php?
你可以这样做,表情符号是一个普通字符。
$emoji = "✊";
$str = str_replace('"', "", json_encode($emoji, JSON_HEX_APOS));
$myInput = $str;
$myHexString = str_replace('\u', '', $myInput);
$myBinString = hex2bin($myHexString);
print iconv("UTF-16BE", "UTF-8", $myBinString);
使用 mb_convert_encoding
并将 UTF-8
转换为 UTF-32
。然后做一些额外的格式化:
// Strips leading zeros
// And returns str in UPPERCASE letters with a U+ prefix
function format($str) {
$copy = false;
$len = strlen($str);
$res = '';
for ($i = 0; $i < $len; ++$i) {
$ch = $str[$i];
if (!$copy) {
if ($ch != '0') {
$copy = true;
}
// Prevent format("0") from returning ""
else if (($i + 1) == $len) {
$res = '0';
}
}
if ($copy) {
$res .= $ch;
}
}
return 'U+'.strtoupper($res);
}
function convert_emoji($emoji) {
// ✊ --> 0000270a0001f3fe
$emoji = mb_convert_encoding($emoji, 'UTF-32', 'UTF-8');
$hex = bin2hex($emoji);
// Split the UTF-32 hex representation into chunks
$hex_len = strlen($hex) / 8;
$chunks = array();
for ($i = 0; $i < $hex_len; ++$i) {
$tmp = substr($hex, $i * 8, 8);
// Format each chunk
$chunks[$i] = format($tmp);
}
// Convert chunks array back to a string
return implode($chunks, ' ');
}
echo convert_emoji('✊'); // U+270A U+1F3FE
简单的功能,灵感来自@d3L 上面的回答
function emoji_to_unicode($emoji) {
$emoji = mb_convert_encoding($emoji, 'UTF-32', 'UTF-8');
$unicode = strtoupper(preg_replace("/^[0]+/","U+",bin2hex($emoji)));
return $unicode;
}
例子
emoji_to_unicode("");//returns U+1F4B5
我正在尝试检测我通过的表情符号,例如a POST(不需要来源)。
举个例子,我正在使用这个表情符号:✊(我希望它是可见的)
它的代码是 U+270A U+1F3FE
(我使用 http://unicode.org/emoji/charts/full-emoji-list.html 作为代码)
现在我用 json_encode 转换了表情符号,我得到:\u270a\ud83c\udffe
这里唯一相等的部分是270a
。 \ud83c\udffe
不等于 U+1F3FE
,即使我将它们加在一起 (1B83A
)
如何使用例如从 ✊ 到 U+270A U+1F3FE
php?
你可以这样做,表情符号是一个普通字符。
$emoji = "✊";
$str = str_replace('"', "", json_encode($emoji, JSON_HEX_APOS));
$myInput = $str;
$myHexString = str_replace('\u', '', $myInput);
$myBinString = hex2bin($myHexString);
print iconv("UTF-16BE", "UTF-8", $myBinString);
使用 mb_convert_encoding
并将 UTF-8
转换为 UTF-32
。然后做一些额外的格式化:
// Strips leading zeros
// And returns str in UPPERCASE letters with a U+ prefix
function format($str) {
$copy = false;
$len = strlen($str);
$res = '';
for ($i = 0; $i < $len; ++$i) {
$ch = $str[$i];
if (!$copy) {
if ($ch != '0') {
$copy = true;
}
// Prevent format("0") from returning ""
else if (($i + 1) == $len) {
$res = '0';
}
}
if ($copy) {
$res .= $ch;
}
}
return 'U+'.strtoupper($res);
}
function convert_emoji($emoji) {
// ✊ --> 0000270a0001f3fe
$emoji = mb_convert_encoding($emoji, 'UTF-32', 'UTF-8');
$hex = bin2hex($emoji);
// Split the UTF-32 hex representation into chunks
$hex_len = strlen($hex) / 8;
$chunks = array();
for ($i = 0; $i < $hex_len; ++$i) {
$tmp = substr($hex, $i * 8, 8);
// Format each chunk
$chunks[$i] = format($tmp);
}
// Convert chunks array back to a string
return implode($chunks, ' ');
}
echo convert_emoji('✊'); // U+270A U+1F3FE
简单的功能,灵感来自@d3L 上面的回答
function emoji_to_unicode($emoji) {
$emoji = mb_convert_encoding($emoji, 'UTF-32', 'UTF-8');
$unicode = strtoupper(preg_replace("/^[0]+/","U+",bin2hex($emoji)));
return $unicode;
}
例子
emoji_to_unicode("");//returns U+1F4B5