LoginSignup
6
8

More than 5 years have passed since last update.

pack(),hex2bin()でデコード、unpack(),bin2hex()でエンコード

Last updated at Posted at 2016-09-19

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対応 文字コード表

6
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8