• ベストアンサー

PHPのソース内でのVodafone絵文字の扱い方

PHPで、DoCoMo,Vodafone,auの3機種の絵文字を出し分けるファンクションを書いていました。 function emoji($imode,$vodafone,$ez){ $ua = $_SERVER["HTTP_USER_AGENT"]; if(ereg("DoCoMo",$ua)){ print $imode; }else if(ereg("J-PHONE",$ua)){ print $vodafone; }else if(ereg("Vodafone",$ua)){ print $vodafone; }else if(ereg("UP.Browser",$ua)){ print "<IMG LOCALSRC=".$ez." />"; } } というファンクションを定義し、 <?php emoji(ドコモの絵文字,Vodafoneの絵文字,EZの絵文字番号); ?> と書けば、アクセスしたキャリアによって絵文字を出し分けるしくみです。 しかし、Vodafoneの絵文字のコードが特殊なため、エラーになってしまいます。 $記号が含まれているせいかな?と思って $の前に\を入れてみたりもしましたが、ダメでした。 何かよい回避方法はありますでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • briant-jr
  • ベストアンサー率50% (5/10)
回答No.2

ボーダフォンの絵文字がバイナリなのでこのような問題が生じているのです。 一度アスキーコード(数値)に変換して、表示の直前でバイナリに戻せば問題ないと思います。 サンプルコードを書いてみました 以下のコードをどこかにコピーしてサーバにアップしてみてください。そしてボーダフォン端末でアクセスしでください。 上のテキストボックスに絵文字をコピペ(602SHではスカイメールで絵文字を入力して絵文字をコピーして貼り付けができました)して変換するとアスキーコードが出ます 下にそのアスキーコードを入力すると元の絵文字に戻るのが確認できます。 という具合でどうでしょう? わからないところがあれば追加で質問してください <?php if(isset($_POST['codev_id'])) { $codev_id = $_POST['codev_id']; // Vodafone用コード $codev1 = ord( substr($codev_id,2,1) ); $codev2 = ord( substr($codev_id,3,1) ); $codev = ($codev1 << 8) | $codev2; } else if(isset($_POST['codev'])) { $codev = $_POST['codev']; //復元開始 $st1 = 0x1B; $st2 = 0x24; $end = 0x0F; $v1 = (($codev & 0xFF00) >> 8); $v2 = ( $codev & 0x00FF ); $codev = chr($st1).chr($st2).chr($v1).chr($v2).chr($end); } ?> <html> <body> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> <input type="text" name="codev_id"> <input type="submit" value="表示"> </form> アスキーコード:<?php echo $codev; ?><br> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> <input type="text" name="codev"> <input type="submit" value="バイナリ復元"> </form> バイナリコード:<?php echo $codev; ?><br> </body> </html>

その他の回答 (2)

  • briant-jr
  • ベストアンサー率50% (5/10)
回答No.3

#2です。 すみません、私のコードちょっと表示がおかしいですねww ふたつとも同じ表示が出ます。変数同じにしてしまってました。 そのあたりはご了承ください。 また、関数に使われるということを忘れていましたが、おつくりになった関数にはアスキーの数値を入力してその関数内で以下のコードによりバイナリに変換するという風にしてくださいね。 //復元開始 $st1 = 0x1B; $st2 = 0x24; $end = 0x0F; $v1 = (($codev & 0xFF00) >> 8); $v2 = ( $codev & 0x00FF ); $codev = chr($st1).chr($st2).chr($v1).chr($v2).chr($end); 以上、補足です。

  • awazak
  • ベストアンサー率36% (61/165)
回答No.1

自信なし… <? function emoji($imode,$vodafone,$ez){ $ua = $_SERVER["HTTP_USER_AGENT"]; echo $ua; if(ereg("DoCoMo",$ua)){ return $imode; }elseif(ereg("J-PHONE",$ua)){ return $vodafone; }elseif(ereg("Vodafone",$ua)){ return $vodafone; }elseif(ereg("UP.Browser",$ua)){ return "<IMG LOCALSRC=".$ez." />"; } } echo emoji($imode,$vodafone,$ez); ?> これだとどうですか?

関連するQ&A