auの絵文字処理とか
Webプログラム作成を仕事にしてると、当然の様にたまに携帯対応のサイトも作る必要があるわけですが、私はPHSしか持ったことが無い(しかも現在ので人生二台目)んであまりキャリアとか端末固有情報とかを知らないんです。
だから今更なにが悲しくてWAP1端末の事なんて気にして(ry
んで、携帯用投稿フォームで絵文字をサニタイズとして削除するのが要件にあったので調べていたら、青マンモス本にそのものの例があったので拝借することに。
ただP.307のmobile.phpで
//i モード絵文字判別関数(拡張絵文字領域含む)
function is_imode_emoji($s)
{
+ if(strlen($s)<2){return false;}//2byte無い場合
$hbyte = ord($s[0]);
$lbyte = ord($s[1]);
...
としないと1byteと混在した時におかしくなる。
で、auの端末ではFORMには直接絵文字入力出来ないらしくて、エミュレータでも出来なかったので安心していたらテスト時に実機でバリバリ入れられた。
最近の機種は入力できるらしい。がっでむ。
と言うことで改めて調べると、ウェブウェア・オルグさんによると
EZWeb絵文字(2byteで1文字)
1byte目 | 2byte目 |
---|---|
F3,F6,F7 | 40-FC |
F4 | 40-8D |
と言う事なので、青マンモスのimode削除のと同様のau用関数を追加する。
ただし上記リンク内でも言及されているように 2byte目+1byte目でSJISの文字にマッチする場合があるので、それを除くコードも追加する必要がある。
あと、普段のサーバでは無いのでphp.iniのmagic_quotes_gpc=Onになっていた。
\の文字コードは0x5cなので、auの絵文字で後ろが0x5cの物等は\\にされてしまって削除出来ずにごみが残りはまってしまった。
例)天道虫=0x0f+0x5c
どっちにしろ普通の漢字でも同様なので日本語環境だと特にmagic_quotes_gpc=Offはぢうよう