UTF-8の文字コードを並べたものから文字列を作るのにはpack() または hex2bin() を使う。
※hex2bin() はPHP 5.4以降
また、その逆に文字列を文字コードの並びの文字列に変換するのは unpack() または bin2hex() を使う。
bin2hex() と unpack() は戻り値の型が違うので注意(前者は文字列、後者は配列)。
decode_encode_test.php
mb_internal_encoding('UTF-8');
//header('Content-Type: text/plain;charset=utf-8');
$char = 'あ';
$hex_str = bin2hex($char);
echo $char . ':' . var_export($hex_str, true) . PHP_EOL;
$char_decoded = hex2bin($hex_str);
echo $char_decoded . PHP_EOL;
$char = 'い';
$hex_str = unpack('H*', $char);
echo $char . ':' . var_export($hex_str, true) . PHP_EOL;
$char_decoded = pack('H*', $hex_str[1]);
echo $char_decoded . PHP_EOL;
// "ア亜"
echo pack('H*', 'E382A2E4BA9C') . PHP_EOL;
// Windowsで入力するとハイフンマイナス(全角) UTF-8:EFBC8D Unicode:FF0D
echo pack('H*', 'EFBC8D') . PHP_EOL;
// Macで入力するとマイナス UTF-8:E28892 Unicode:2212
echo pack('H*', 'E28892') . PHP_EOL;
実行結果は下記のようになる。
$ php decode_encode_test.php
あ:'e38182'
あ
い:array (
1 => 'e38184',
)
い
ア亜
-
−
$
参考サイト
PHPのunpack関数を活用する|katyos開発室
【PHP】 16進エンコードされたバイナリ文字列をデコードする « PHP « 技術ブログ « 株式会社プロネット
PHPでバイナリプログラミングその2 テキストとは何か : アシアルブログ
Unicode対応 文字コード表