繁体   English   中英

PHP将表情符号从UTF-8转换为UTF-8字节(UTF-16)

[英]PHP Convert emojis from UTF-8 to UTF-8 Bytes (UTF-16)

所以我需要这个:\\ ud83d \\ ude01变成这个:\\ xF0 \\ x9F \\ x98 \\ x81我一直在挖掘,对于我的一生,我不知道该怎么做。 有人可以帮我吗? 提前致谢。

\?\?是16位Unicode字符的转义序列 ,而您显然想要的是8位字符的转义序列(使用十六进制数字)。

如前所述,您可以使用json_decode()从Unicode转义序列中获取实际的表情符号:

$str = "\ud83d\ude01";
$str = json_decode('"' . $str . '"');
echo $str;    // 😁

然后,您可以使用str_split()获取该表情符号在数组中的每个字节,如文档中所述:

处理多字节编码的字符串时,str_split()将拆分为字节,而不是字符。

为了将每个字节转换为十六进制表示,请使用ord()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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM