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

https://3v4l.org/A1PEn