あけましておめでとうございます。
年明けて新番組(主にアニメ)が続々と始まり睡眠時間がガリガリ削られているプログラマの中島です。
年末年始は皆様、いかがお過ごしでしたでしょうか?
私は例に漏れず半年に一度行われるお祭り、『コミックマーケット79』(通称:コミケ)に参加してきました。
年末に薄い本を買う為にこんな列に並んでいたと思うと考え深いものがあります・・・・。
今回は東京都の『非実在青少年』の条例が可決された後に開催されたのですが、概ね問題も起きずに開催されました。
中には同人誌を印刷している印刷所によっては、条例の影響を受け印刷を断られてしまって新刊を落としてしまうサークルもあったようなので、条例の影響はゼロとは言い切れないようですね。
プリラボにポストされた絵文字を3キャリア対応させるためにMobilePictogramConverterを導入したので、その際に作成したソースをアウトプット。
【実行環境】
サイトの文字コード:SJIS
DB:mysql5.0
DB文字コード:UTF-8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
// POSTされた絵文字入りデータをDBに格納する // DBに格納する際は絵文字とその時利用されたキャリアの2つを格納する mb_substitute_character("long"); $str="POSTされたString"; $str = mb_convert_encoding($str, "UTF-8", "SJIS"); $carrier=carrier(); $sql="INSERT INTO test (str,carrier) VALUES ('$str','$carrier')"; /** * 3キャリア対応 絵文字変換メソッド * * 要インクルードファイル * /MobilePictogramConverter/MobilePictogramConverter.php * @param $str * 文字データ * @param $carrier * キャリア */ function emojiEncoding($str, $carrier){ $str = preg_replace_callback("/BAD\+([a-zA-Z0-9]{4})/","conv",$str); $mpc_c = mpc_carrier($carrier); $mpc =& MobilePictogramConverter::factory($str, $mpc_c, MPC_FROM_CHARSET_SJIS); $mpc->setImagePath('../MobilePictogramConverter/img'); $str = $mpc->autoConvert(); return $str; } /** * 書き込み時に現在のキャリアを取得 * */ function carrier(){ $user_agent = $_SERVER['HTTP_USER_AGENT']; if(eregi("DoCoMo", $user_agent)){ $a = "DoCoMo"; }elseif (eregi("UP\.Browser", $user_agent)){ $a = "au"; } elseif (eregi("J-PHONE",$user_agent) or eregi("Vodafone",$user_agent) or eregi("SoftBank",$user_agent)) { $a = "J-PHONE"; }else{ $a = "pc"; } return $a; } /** * emojiEncodingメソッド専用 * DBから取り出した絵文字が、どのキャリアから登録されたものかを確認する関数 * * @param $carrier * キャリア */ function mpc_carrier($carrier) { if($carrier=="DoCoMo") { $a="FOMA"; } elseif ($carrier=="au") { $a="EZWEB"; } elseif ($carrier=="J-PHONE") { $a="SOFTBANK"; } else { $a="FOMA"; } return $a; } /** * データをバイナリ文字列にパックする * * @param $match */ function conv($match) { return pack('H*',$match[1]); } |
絵文字をエンコードするには、DB格納時に文字コードの値を出力したものと、入力した際のキャリアを取得することが必要である。
キャリアが対応していない絵文字を表示するときは[絵文字名]と表示される。