サンプルコード
この方法なら、携帯電話向けの絵文字も出力可能
// U+1F37A の場合
$code = '1F37A';
$bin = pack('H*', (str_repeat('0', 8 - strlen($code)) . $code));
// PHP5.4以降の場合は hex2bin() 関数が使用可能
// $bin = hex2bin(str_repeat('0', 8 - strlen($code)) . $code);
$char = mb_convert_encoding($bin, 'UTF-8', 'UTF-32BE');
var_dump($char);
出力結果
=> string(4) ""
合成文字の場合
合成文字の場合は、 バイナリ文字列を結合すれば OK
// U+0031 U+20E3 の場合
$code = '0031';
$code2 = '20E3';
$bin = pack('H*', (str_repeat('0', 8 - strlen($code)) . $code));
$bin2 = pack('H*', (str_repeat('0', 8 - strlen($code2)) . $code2));
$char = mb_convert_encoding($bin . $bin2, 'UTF-8', 'UTF-32BE');
var_dump($char);
出力結果
=> string(4) ""