こんにちは。@kasumiiです。
フォームから渡されてきたデータなどで絵文字がちょっとやっかいだからとりあえず削除したい!というときに、いくつか方法があったのでメモ。
HTML_Emoji ライブラリを使って絵文字を削除する
携帯絵文字変換ライブラリ HTML_Emoji – libemoji.com
上記のライブラリを使えば絵文字をいろいろ変換できるのですが、今回は removeEmoji メソッドを使ってサクッと削除してみます。
HTML_Emoji 0.8.3 より前のバージョンではiOS5以降の絵文字に対応できていないようなので、以下のバージョンをダウンロードして使えばOKです。
http://download.revulo.com/PHP/HTML_Emoji-20111114.zip
使い方はすごく簡単。
// HTML_Emoji ライブラリの読み込み require_once 'HTML/Emoji.php'; // HTML_Emoji オブジェクトを作成 $emoji = HTML_Emoji::getInstance(); // $text に含まれている UTF-8 の絵文字を削除 $text = $emoji->removeEmoji($text);
Shift_JIS や数値文字参照の絵文字には対応していませんので、 必要ならば事前に UTF-8 の絵文字に変換しておいて下さい。
【参考】iPhoneの絵文字を削除したい
4バイト文字だけ削除できればいいやという場合
iPhoneの絵文字の中にはUTF-8の4バイト文字のものが含まれていて、MySQLにデータをInsertしようとすると文字列が途中で切れてしまうという現象が発生します。これはMySQLのバージョンや文字コードの設定によって回避できますが、とりあえず応急処置的に4バイト文字は全部削除したい、というときなどに使えるかも。
$textwithout4byte = preg_replace('/[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]/', '', $textwith4byte);
【参考】iPhoneの絵文字をMySQLにInsertしようとすると文字列がぶった切れる件
携帯用絵文字の場合
携帯用のSJIS形式の絵文字ならPHPの mb_substitute_character を使えば2行のコードで絵文字を除去できるみたいです。しらなかったー。
mb_substitute_character('none'); $str = mb_convert_encoding($str, 'SJIS', 'SJIS');