PHP5.4からでないと対応していないUnicodeアンエスケープをPHP5.3でもできるようにしたラッパー関数

オープンソースこねこねさんのところでもらってきた関数ですが、これかなりいいです。jsonの所々機能に対して5.4ではいろいろと対応が充実してきたのですが、5.3では結構中途半端感が漂っていて、Unicodeのアンエスケープは自分で何かしないとイケなかったのですが、かなりいいラッパーを見つけたのでご紹介します。

使い方としては、
print json_encode($json_array);

print json_xencode($json_array);
にするだけです。ラッパーなので元々の関数も中に呼び込んでくれているので非常にいいです。

/**
* PHP5.4からでないと対応していないUnicodeアンエスケープをPHP5.3でもできるようにしたラッパー関数
* @param mixed $value
* @param int $options
* @param boolean $unescapee_unicode
*/
function json_xencode($value, $options = 0, $unescapee_unicode = true)
{
$v = json_encode($value, $options);
if ($unescapee_unicode) {
$v = unicode_encode($v);
// スラッシュのエスケープをアンエスケープする
$v = preg_replace('/¥¥¥¥¥//', '/', $v);
}
return $v;
}

/**
* Unicodeエスケープされた文字列をUTF-8文字列に戻す。
* 参考:http://d.hatena.ne.jp/iizukaw/20090422
* @param unknown_type $str
*/
function unicode_encode($str)
{
return preg_replace_callback("/¥¥¥¥u([0-9a-zA-Z]{4})/", "encode_callback", $str);
}

function encode_callback($matches) {
return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UTF-16");
}