我正在尝试使用我们的本地运营商api将bengali文本作为短信发送。但是它们不支持将unicode(utf-8)文本作为post / get参数。他们回答说:
对于每个孟加拉语字母表,都有标准的HEXDUMP表示 需要插入消息内容部分。
如下所示孟加拉语单词低于HEXDUMP表示
বাংলাদেশ: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"
所以,我的问题是如何将该文本/字符串转换为hexdump作为我的载体所期望的。
答案 0 :(得分:3)
您获得的十六进制转储是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字符是不可靠的,因为字符串中字节的解释将取决于您的系统详细信息/编辑器/编译器或解释器设置等。