古いバージョンのMySQLを使わないといけなくて、その際に調べたもの

最近では、アクセスログを見ても検索クエリを取得できないようになってはいるようですが、たまに取れる検索クエリをmysqlへinsertしようとしたところ、絵文字を境に途中で途切れてしまったようで、primary keyで引っかかってinsertできませんでした。

charsetを変えたらいいのでは?

事情があって、環境が古いままなんです。myisamで。で、バージョンをあげれないと。

だから、もう除去して入れる、簡単だからと思ったのです。

というか、そもそも検索クエリの絵文字なんか除去しても問題ないと思うので、今回は絵文字を取り除いてからmysql へinsertしました。アクセスログを入れて数値見てただけなんです。

4バイト文字が絵文字なので4バイト文字を除去する

使ってる言語はPHPなのでPHP環境で作成します。

スマホの絵文字というのは、調べてみると4バイト文字とかいうものらしいので、以下のコードでマッチした部分を無くしてしまいます。

$after_text=preg_replace('/[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]/', '', $text);

これでひとまず、スマホの絵文字は除去できました。
そういえば、絵文字といえば、ガラケーの時も絵文字がありました。

それも除去しないといけません。

ガラケーの絵文字を除去する

以下でマッチしたものを除去します

$after_text=preg_match('/(?:\xEE[\x80\x81\x84\x85\x88\x89\x8C\x8D\x90-\x9D\xAA-\xAE\xB1-\xB3\xB5\xB6\xBD-\xBF]|\xEF[\x81-\x83])[\x80-\xBF]/', $text));

これでガラケーの絵文字も除去できました。

ひとまず今回はここまで。色々と絵文字だのなんだのとめんどくさい話ですね…。

コメント