PHPで携帯絵文字を削除する

Pocket

携帯電話のバイナリ絵文字があるHTMLのエンコードを変更するのに失敗するときありますよね?

今回、バイナリ絵文字があるため、mb_convert_encoding()が失敗してしまいました。

それを改善するために、一度絵文字を削除することに。

事前準備として、下のような絵文字を16進数で書いたファイルを emoji.txt として保存します

F89F
F8A0
F8A1
F8A2
F8A3
F8A4
F8A5
F8A6
F8A7
F8A8
F8A9
F8AA
F8AB
F8AC
F8AD
F8AE

作成した emoji.txt のデータを元に絵文字を削除します。

下が絵文字を削除する関数です。

function emoji_remove($string="", $efile="emoji.txt")
{
	if ( ! file_exists($efile))
		return $string;

	$e = file($efile);
	for($i=0;$i<count($e);$i++)
	{
		$string = str_replace(pack("H*", chop($e[$i])), "", $string);
	}

	unset($e);
	return $string;
}

pack()で emoji.txt の文字列をバイナリデータにます。
そのデータを str_replace() で空白に置換してます。
PHP の str_replace()がバイナリ対応なのでできる技ですね。

emoji.txt を

置換前の絵文字データ[tab]置換後の絵文字データ

のようにして、emoji_remove()を改造すれば、他キャリア絵文字への変換など応用が効くと思います。

コメントを残す