LoginSignup
1

More than 5 years have passed since last update.

EUC-JPでserializeされた文字列をUTF-8でunserializeする。

Posted at

XOOPS Cubeで文字コードをEUC-JPからUTF-8へ変更したときに、DBにEUC-JPでseriarizeした値が保存されてて、それをUTF-8で取り出したいケースがあったんで、そのときにやった方法をメモっときます。

ちなみにXOOPS Cubeでこのケースにあたったのはwaffleモジュールです。

文字列をシリアライズするとその文字列のバイト数とその文字って組み合わせで表現したテキストに変換されるので、EUC-JPでシリアライズされたデータはEUC-JPでアンシリアライズしないと、バイト長変わってしまってアンシリアライズできないんですよね。

ってことで下記の様にしてアンシリアライズしました。

// 内部エンコーディングを EUC-JP にしとく
mb_internal_encoding('EUC-JP');

// DBからとってきた$data はUTF-8になってるのでEUC-JPに変換してからunserialize
$result = unserialize(mb_convert_encoding($data, 'EUC-JP', 'UTF-8'));

// unserializeされた値をUTF-8へ
// https://qiita.com/RyujiAMANO/items/3b7adb23408ad100375d に書いた関数使ってます。
$result = mb_convert_encoding_recursive($result, 'UTF-8', 'EUC-JP');

// 内部エンコーディングを元のUTF-8にもどす
mb_internal_encoding('UTF-8');

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
1