以下列格式转换为十六进制的正确代码是什么?
What is the correct code to convert to hex in below format?
我正在尝试使用我们的本地运营商 api 以短信形式发送孟加拉语文本。但他们不支持 unicode (utf-8) 文本作为 post/get 参数。他们这样回答:
For every Bengali alphabet there is standard HEXDUMP representation
which need to be inserted in message content part.
Like below Bengali word is having below HEXDUMP representation
বাংলাদেশ : 09AC09BE098209B209BE09A609C709B6
因此,我尝试遵循从 SO 收集的两个代码。
代码-1:
$strBN = 'বাংলাদেশ';
echo bin2hex($strBN);
//it reutrns this value "e0a6ace0a6bee0a682e0a6b2e0a6bee0a6a6e0a787e0a6b6"
代码 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"
所以,我的问题是如何按照运营商的预期将 text/string 转换为 hexdump。
您获得的十六进制转储是 UTF-8 格式,这是一种在 8 位流中可靠地表示 Unicode 字符的方法。
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 字符是不可靠的,因为对字符串中字节的解释将取决于您的系统详细信息/编辑器/编译器或解释器设置等。
我正在尝试使用我们的本地运营商 api 以短信形式发送孟加拉语文本。但他们不支持 unicode (utf-8) 文本作为 post/get 参数。他们这样回答:
For every Bengali alphabet there is standard HEXDUMP representation which need to be inserted in message content part.
Like below Bengali word is having below HEXDUMP representation
বাংলাদেশ : 09AC09BE098209B209BE09A609C709B6
因此,我尝试遵循从 SO 收集的两个代码。
代码-1:
$strBN = 'বাংলাদেশ';
echo bin2hex($strBN);
//it reutrns this value "e0a6ace0a6bee0a682e0a6b2e0a6bee0a6a6e0a787e0a6b6"
代码 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"
所以,我的问题是如何按照运营商的预期将 text/string 转换为 hexdump。
您获得的十六进制转储是 UTF-8 格式,这是一种在 8 位流中可靠地表示 Unicode 字符的方法。
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 字符是不可靠的,因为对字符串中字节的解释将取决于您的系统详细信息/编辑器/编译器或解释器设置等。