こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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の絵文字のコードが特殊なため、エラーになってしまいます。

$記号が含まれているせいかな?と思って
$の前に\を入れてみたりもしましたが、ダメでした。

何かよい回避方法はありますでしょうか?

投稿日時 - 2005-12-12 13:16:18

QNo.1834407

暇なときに回答ください

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

ボーダフォンの絵文字がバイナリなのでこのような問題が生じているのです。
一度アスキーコード(数値)に変換して、表示の直前でバイナリに戻せば問題ないと思います。

サンプルコードを書いてみました

以下のコードをどこかにコピーしてサーバにアップしてみてください。そしてボーダフォン端末でアクセスしでください。
上のテキストボックスに絵文字をコピペ(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>

投稿日時 - 2005-12-14 23:08:39

このQ&Aは役に立ちましたか?

7人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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);

以上、補足です。

投稿日時 - 2005-12-14 23:22:12

ANo.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);
?>

これだとどうですか?

投稿日時 - 2005-12-13 19:51:30

あなたにオススメの質問