Какой правильный код для преобразования в шестнадцатеричный формат в формате ниже?

Я пытаюсь отправить бенгальский текст в виде смс с помощью нашего местного оператора API. Но они не поддерживают текст Unicode (utf-8) в качестве параметра post / get. они ответили это:

Для каждого бенгальского алфавита есть стандартное представление HEXDUMP
которые должны быть вставлены в часть содержимого сообщения.

Как ниже слово бенгальский имеет представление ниже HEXDUMP

বাংলাদেশ: 09AC09BE098209B209BE09A609C709B6

Итак, я попробовал следующие два кода, собранные из SO.

Код-1:

$strBN = 'বাংলাদেশ';
echo bin2hex($strBN);
//it reutrns this value "e0a6ace0a6bee0a682e0a6b2e0a6bee0a6a6e0a787e0a6b6"

Code-2:

$strBN = 'বাংলাদেশ';
echo fToHex($strBN);
function fToHex($string)
{
$strHData = '';
for ($i = 0; $i < strlen($string); $i++)
{
$strHData .= str_pad(dechex(ord($string[$i])), 2, '0', STR_PAD_LEFT);
}
return $strHData;
}
//This also return same value as above "e0a6ace0a6bee0a682e0a6b2e0a6bee0a6a6e0a787e0a6b6"

Итак, мой вопрос, как я могу преобразовать этот текст / строку в hexdump, как ожидал мой носитель.

2

Решение

Получаемый шестнадцатеричный дамп — это формат UTF-8, который позволяет надежно представлять символы Юникода в 8-битном потоке.

E0 A6 AC E0 A6 BE E0 A6 82 E0 A6 B2 E0 A6 BE E0 A6 A6 E0 A7 87 E0 A6 B6

Пример, с другой стороны, представляет собой дамп значений UTF-16 (или усеченного 16-битного кода Unicode):

09AC 09BE 0982 09B2 09BE 09A6 09C7 09B6

В вашем случае решение заключается в преобразовании в кодировку UTF-16:

echo bin2hex(mb_convert_encoding('বাংলাদেশ', 'UTF-16'));"> 09ac09be098209b209be09a609c709b6

Обратите внимание, что использование символов Unicode в коде ненадежно, потому что интерпретация байтов в строке будет зависеть от деталей вашей системы / настроек редактора / компилятора или интерпретатора и т. Д.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]