Saya mencoba mengirim teks bengali sebagai sms menggunakan api operator lokal kami. Tetapi mereka tidak mendukung teks unicode (utf-8) sebagai parameter post/get. mereka menjawab ini:

Untuk setiap alfabet Bengali ada representasi HEXDUMP standar yang perlu disisipkan di bagian isi pesan.

Seperti di bawah ini, kata Bengali memiliki representasi di bawah HEXDUMP

: 09AC09BE098209B209BE09A609C709B6

Jadi, saya mencoba mengikuti dua kode yang dikumpulkan dari SO.

Kode-1:

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

Kode-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"

Jadi, pertanyaan saya adalah bagaimana saya dapat mengonversi teks/string itu menjadi hexdump seperti yang diharapkan oleh operator saya.

2
Zakir_SZH 12 November 2017, 11:35

1 menjawab

Jawaban Terbaik

Hex dump yang Anda dapatkan adalah format UTF-8, yang merupakan cara untuk mewakili karakter Unicode dengan andal dalam aliran 8-bit.

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

Contoh di sisi lain adalah dump dari nilai UTF-16 (atau codepoint Unicode 16-bit terpotong):

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

Dalam kasus Anda, solusinya adalah mengonversi ke pengkodean UTF-16:

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

Perhatikan bahwa menggunakan karakter Unicode dalam kode tidak dapat diandalkan, karena interpretasi byte dalam string akan bergantung pada detail sistem Anda/editor/kompiler atau pengaturan juru bahasa, dll.

3
Sami Hult 12 November 2017, 09:09