表題通り。
複数データをserializeしてmysqlに収納していたら、一部データが吹っ飛ぶことがあった。調べると絵文字のせいで、そこ以降の文字列が全てふっとび、serializeとしてのデータを保持できずに、変換できなくなっていた。これの対策をする。
mysqlのバージョンが低いと、UTF-8環境で絵文字が吹っ飛ぶらしい。なので、これを回避するために、文字列を全てエンコードしちゃうという力業にでる。
function my_serialize($obj) {
return json_encode(serialize($obj));
}
function my_unserialize($obj) {
$temp_obj = json_decode(@unserialize($obj), true);
if ($temp_obj) $obj = $temp_obj;
return $obj;
}
シリアライズした文字列をjsonでエンコードすることで、絵文字用の文字列も全てエンコードしてしまう。それをデコードするときは、扱いやすいように配列オプションをtrueに。エラーでデコードできなかった場合、そのまま文字列で返すように、またアンシリアライズでエラーがでないように@がついている。これで問題無く絵文字が扱えている。