携帯電話のバイナリ絵文字がある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()を改造すれば、他キャリア絵文字への変換など応用が効くと思います。