表情符号未正确编码为十六进制

时间:2019-02-19 17:09:02

标签: php unicode encoding hex emoji

$message = "Spanish Language 
á, é, í, ó, ú, ñ, ü
       ";
$hex = '@U' . strtoupper(bin2hex(mb_convert_encoding($message, 'UCS-2','auto')));

当我将$ hex发送到以下API中时,除表情符号外,其他所有东西都没问题,而如果表情符号?符号出现在移动设备中

https://api.txtlocal.com/docs/encodingdecodingunicode

请纠正我做错的事情。

2 个答案:

答案 0 :(得分:2)

这些表情符号在UCS-2中无法表示。在UTF-16中,使用代理对表示它们,而UCS-2不支持代理对。例如,在UTF-16中的编码如下:

0x3d 0xd8 0x0b 0xde

这是四个字节,尽管据称只是一个字符。 UCS-2保证其中包含的所有字符都将恰好占两个字节,因此不包括在内。

答案 1 :(得分:0)

我已解决此问题,只需按照代码行进行更改

return '@U' . strtoupper(bin2hex(mb_convert_encoding($message, 'UTF-16','UTF-8')));