所以我需要这个:\ ud83d \ ude01变成这个:\ xF0 \ x9F \ x98 \ x81 我一直在挖掘,为了我的生活,我无法弄清楚如何做到这一点。 有人可以帮帮我吗? 提前谢谢。
答案 0 :(得分:2)
\ud83d\ude01
是escape sequence,你显然想要的是一个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