PHPで絵文字を削除する方法

こんにちは。@kasumiiです。

フォームから渡されてきたデータなどで絵文字がちょっとやっかいだからとりあえず削除したい!というときに、いくつか方法があったのでメモ。

携帯絵文字変換ライブラリ 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の絵文字を削除したい

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');

【参考】PHPを使ってたった2行で絵文字を取り除く方法