先週から携帯ホームページをはじめて作り始めたんですが、絵文字表示で少しつまづいたのでメモ書きです。


携帯3キャリアに対応した絵文字を表示させるphpスクリプトについてです。



最初に変換のための絵文字データを作りこむのが面倒だな・・・


と思ってネット上を探してみたら、シバ犬さんという方がデータファイルを作っていてそれを使わせて頂きました。


シバ犬さんのブログはこちら 。データファイルはemoji.csvです)


絵文字表示スクリプトもシバ犬さんのところにあったのでこれも使わせてもらおうと思ったのですが、


自分の環境だとなぜかドコモで表示できなかったので、少し自分用に修正しました。


その絵文字表示スクリプトは下の通りです。


<?php
//絵文字データの読込み
$emoji_data = "emoji.csv";


$emoji_array = array();
$emoji_array[] = "";
$contents = @file($emoji_data);
foreach($contents as $line){
$line = rtrim( $line );
$emoji_array[] = explode(",", $line);
}


//携帯UA取得
$agent = $_SERVER["HTTP_USER_AGENT"];
//for test
//$agent = "SoftBank";

//UAから3キャリア機種判別
$career = getCareer($agent);

//UAから3キャリア機種判別
function getCareer($data){
if(preg_match("/DoCoMo/i", $data)){
return "docomo";// i-mode
} else if(preg_match("/(J\-PHONE|Vodafone|MOT\-[CV]980|SoftBank)/i", $data)){
return "softback";// softbank
} else if(preg_match("/KDDI\-/i", $data) || preg_match("/UP\.Browser/i", $data)){
return "au";// ezweb
} else if(preg_match("/^PDXGW/i", $data) || preg_match("/(DDIPOCKET|WILLCOM);/i", $data)){
return "willcom";// willcom
} else if(preg_match("/^L\-mode/i", $data)){
return "lmode";// l-mode
} else {
return "etc";
}
}

//絵文字を表示する
function dispEmoji($code){
global $career,$emoji_array;
if(preg_match("/[0-9]{1,3}/", $code) && is_numeric($code) && 0 < $code && $code < 253) {
if( $career == "softback" ){
//echo "\x1B\$".$emoji_array[$code][3]."\x0F";
if (preg_match("/^[A-Z]{1}?/", $emoji_array[$code][3])) {
echo "\x1B\$".$emoji_array[$code][3]."\x0F";
} else {
echo $emoji_array[$code][3];
}
} else if( $career == "au" ){
//echo "<img localsrc=\"".$emoji_array[$code][2]."\" />";
if (preg_match("/[^0-9]/", $emoji_array[$code][2])) {
echo $emoji_array[$code][2];
} else {
echo "<img localsrc=\"".$emoji_array[$code][2]."\" />";
}
} else {
echo $emoji_array[$code][1];
}
}
}

?>


使い方ですが、絵文字を使いたいファイルでまず上記スクリプトのファイルを読込んでください。


(読込んだ時点で絵文字データを読込んでユーザエージェントから携帯キャリアの判別をしています)


そして、絵文字表示は


<?php dispEmoji("125"); ?>


という使い方です


(125はドコモの絵文字Noです。シバ犬さんのemoji.csvを参考にしてください。)


dispEmoji()関数について1点注意点ですが、ソフトバンクモバイル、au以外の場合はドコモの絵文字を表示させるようにしています。


これは、また個人的な別の問題なのですが、グーグルに携帯ホームページがPC用と認識されたみたいなので、絵文字を使って携帯用と認識してもらうためです。


クローラにも携帯絵文字を読込んでもらえればいけるんじゃないのかなと思っています・・・

(他にいい方法があれば教えて欲しいです。)


まぁ、ドコモの絵文字は他の機種・PCブラウザでも表示できる場合が多いのでそんなに問題にならないと思います。


嫌なひとは勝手にdispEmoji()内の条件分岐を変更してください。




あと、もう一つの問題点ですが、自分の環境(xreaサーバ、Openwaveシミュレータ)だとauの絵文字が表示できる文字で表示できない絵文字がありました。


例えば、auのタイプcの絵文字No191(ドコモの絵文字No4)のゆきだるまが表示できませんでした。


でも、これは <img localsrc="191"> とhtmlにベタに書いても表示できなかったのでもうあきらめました・・・

(原因がわかるかたいましたら教えてください)

AD

コメント(1)