0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

mysqlで絵文字以降が消える問題の対策(PHP)

Posted at

表題通り。

複数データを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に。エラーでデコードできなかった場合、そのまま文字列で返すように、またアンシリアライズでエラーがでないように@がついている。これで問題無く絵文字が扱えている。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?