エンジニア的な技術的なブログ

webエンジニアの開発の知見を書きます。PHP、javascript、postgres、mysql、あと多少のインフラ周りとか。

これが答えだっ php5.3以下でもjson_encodeで日本語扱うなら!

PHP 5.4以上なら公式サイト見れば、日本語扱う方法は載ってますが、

それ以下のときはjson_encodeすると結果の文字列は

 

{"\u1234":"\u1234"}

 

みたいな形式になります。

これだと都合が良くなく、日本語のまま扱いたい場合、どうするか?

 

すでに解決している方がブログ書いてくれていました。

使ってみましたが、バッチリ動きました。

 

僕のPHPのバージョンは5.3.xなんで、

それ以下は不明なんですけど

 

/**
 * 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"); 

} 

 

引用元ブログ:

http://kohkimakimoto.hatenablog.com/entry/2012/05/17/180738

 

素敵なラッパーありがとう!