PHP 将表情符号从 UTF8 转换为 UTF-8 字节 (UTF-16)
PHP Convert emojis from UTF-8 to UTF-8 Bytes (UTF-16)
所以我需要这个:\ud83d\ude01 变成这个:\xF0\x9F\x98\x81
我一直在四处挖掘,对于我的一生,我无法弄清楚如何做到这一点。
有人可以帮帮我吗?
提前致谢。
\ud83d\ude01
是 16 位 Unicode 字符的 escape sequence,而您显然想要的是 8 位字符转义序列(使用十六进制数字)。
如前所述,您可以使用 json_decode()
从您的 unicode 转义序列中获取实际的表情符号:
$str = "\ud83d\ude01";
$str = json_decode('"' . $str . '"');
echo $str; //
然后您可以使用 str_split()
获取数组中该表情符号的每个字节,如文档中所述:
str_split() will split into bytes, rather than characters when dealing with a multi-byte encoded string.
为了将每个字节转换为其十六进制表示,使用 ord()
and dechex()
:
$bytes = str_split($str);
for ($i = 0; $i < count($bytes); $i++) {
$bytes[$i] = "\x" . dechex(ord($bytes[$i]));
}
$str = implode('',$bytes);
请注意,您需要在每个十六进制数字前自行添加\x
以获得所需的序列。
一切都放在一起:
$str = "\ud83d\ude01";
$str = json_decode('"' . $str . '"');
$bytes = str_split($str);
for ($i = 0; $i < count($bytes); $i++) {
$bytes[$i] = "\x" . dechex(ord($bytes[$i]));
}
$str = implode('',$bytes);
echo $str; // \xf0\x9f\x98\x81
所以我需要这个:\ud83d\ude01 变成这个:\xF0\x9F\x98\x81 我一直在四处挖掘,对于我的一生,我无法弄清楚如何做到这一点。 有人可以帮帮我吗? 提前致谢。
\ud83d\ude01
是 16 位 Unicode 字符的 escape sequence,而您显然想要的是 8 位字符转义序列(使用十六进制数字)。
如前所述,您可以使用 json_decode()
从您的 unicode 转义序列中获取实际的表情符号:
$str = "\ud83d\ude01";
$str = json_decode('"' . $str . '"');
echo $str; //
然后您可以使用 str_split()
获取数组中该表情符号的每个字节,如文档中所述:
str_split() will split into bytes, rather than characters when dealing with a multi-byte encoded string.
为了将每个字节转换为其十六进制表示,使用 ord()
and dechex()
:
$bytes = str_split($str);
for ($i = 0; $i < count($bytes); $i++) {
$bytes[$i] = "\x" . dechex(ord($bytes[$i]));
}
$str = implode('',$bytes);
请注意,您需要在每个十六进制数字前自行添加\x
以获得所需的序列。
一切都放在一起:
$str = "\ud83d\ude01";
$str = json_decode('"' . $str . '"');
$bytes = str_split($str);
for ($i = 0; $i < count($bytes); $i++) {
$bytes[$i] = "\x" . dechex(ord($bytes[$i]));
}
$str = implode('',$bytes);
echo $str; // \xf0\x9f\x98\x81