Emojis не правильно закодировать в шестнадцатеричное - PullRequest
0 голосов
/ 19 февраля 2019
$message = "Spanish Language 
á, é, í, ó, ú, ñ, ü
? ? ? ? ? ? ? ?";
$hex = '@U' . strtoupper(bin2hex(mb_convert_encoding($message, 'UCS-2','auto')));

Когда я отправляю $ hex в следующий API, все в порядке, кроме смайликов, вместо этого, если на мобильном телефоне появляется символ эмодзи ?

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

, пожалуйста,поправьте меня, что я делаю не так.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Я исправил эту проблему, просто измените после строки кода

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

0 голосов
/ 19 февраля 2019

Эти эмодзи не представлены в UCS-2.В UTF-16 они представлены с использованием суррогатных пар, которые не поддерживаются в UCS-2.Например, U кодируется в UTF-16 следующим образом:

0x3d 0xd8 0x0b 0xde

Это четыре байта, даже если это предположительно только один символ.UCS-2 гарантирует, что все содержащиеся в нем символы будут занимать ровно два байта, поэтому символ ? не включен.

...