PHP研究

15.絵文字削除機能

ケータイ対応掲示板の場合、絵文字の問題がついて回ります。
ここでは、i-mode・J-sky・ドットiの絵文字を削除する処理を紹介します。
ちなみにEZwebでは、WEB閲覧中は絵文字の入力はできませんし、
H”では他社端末では無効なタグと認識されますので、省きます。
また、この例では$linesがもとのテキストデータですが、
文字コードはSJISで。

↓i-mode絵文字の削除

echo emoji_cut($lines); // 呼び出し

function emoji_cut($str) {
for ($i=0, $r = ''; $i<strlen($str); $i++) {
$s = substr($str, $i, 2); // 2バイト取得
if (preg_match("/^[\xf8\xf9]./", $s)) { // 絵文字
$i++;
} elseif (preg_match("/^[\x80-\x9f\xe0-\xf7\xfa-\xfc]./", $s)){ // 絵文字以外
$r .= $s;
$i++;
} else {
$r .= substr($str, $i, 1); // 1バイト文字
}
}
return $r;
}

↓J-sky絵文字の削除

print preg_replace('/\x1b\$([E-G])([\x21-\x7a])+\x0f/',"", $lines); // これだけ

↓ドットi絵文字の削除

echo emoji_cut($lines); // 呼び出し

function emoji_cut($str) {
for ($i=0, $r = ''; $i<strlen($str); $i++) {
$s = substr($str, $i, 2); // 2バイト取得
if (preg_match("/^[\xf0-\xf4]./", $s)) { // 絵文字
$i++;
} elseif (preg_match("/^[\x80-\x9f\xe0-\xef\xf5-\xfc]./", $s)){ // 絵文字以外
$r .= $s;
$i++;
} else {
$r .= substr($str, $i, 1); // 1バイト文字
}
}
return $r;
}

↓i-mode・J-sky・ドットiの絵文字を一気に削除

print emoji_cut($lines); // 呼び出し

function emoji_cut($str) {
for ($i=0, $r = ''; $i<strlen($str); $i++) {
$s = substr($str, $i, 2); // 2バイト取得
if (preg_match("/^[\xf0-\xf4\xf8\xf9]./", $s)) { // 絵文字
$i++;
} elseif (preg_match("/^[\x80-\x9f\xe0-\xef\xe5-\xe7\xfa-\xfc]./", $s)){ // 絵文字以外
$r .= $s;
$i++;
} else {
$r .= substr($str, $i, 1); // 1バイト文字
}
}
$r = preg_replace('/\x1b\$([E-G])([\x21-\x7a])+\x0f/',"", $r);
return $r;
}


で、早速試してみましょう。

こういうログがあるとします。
J-sky・i-mode・ドットiの絵文字をひたすら打ち込んだテキストデータです。
これを実際に使用します。

imode絵文字削除

J-sky絵文字削除

ドットi絵文字削除

i-mode・J-sky・ドットi絵文字一気削除