Hatena::ブログ(Diary)

覇王色を求めて

2007-11-22

MobilePictogramConverterの使い方について

| 02:51 | MobilePictogramConverterの使い方についてを含むブックマーク

使用方法がよく分からないとの意見があったので、今回は使用方法について説明しようと思います。

以下がMPCを使用する上で、最もシンプルなコードです。

<?php
require_once 'MobilePictogramConverter.php';

$str = pack('H*', 'F89F'); // DoCoMo 絵文字 (太陽のマーク)
$mpc =& MobilePictogramConverter::factory($str, MPC_FROM_FOMA, MPC_FROM_CHARSET_SJIS);
echo $mpc->autoConvert();
?>

上記コードの実行結果

これを実行すると、アクセス元のユーザーエージェントにより、各キャリアの絵文字に変換されます。

とりあえず、MPCに当たる部分を説明して行きます。

$mpc =& MobilePictogramConverter::factory($str, MPC_FROM_FOMA, MPC_FROM_CHARSET_SJIS);

上記コードは、キャリアにあったクラスをインスタンス化しています。

基本的に、変換対象はここで指定する引数で決まります。

引数は合計で4つあります。

【第一引数】 (必須)

変換対象の文字列


【第二引数】 (必須)

第一引数で指定した文字列の絵文字キャリア

以下の定数を指定する事が可能です。

  1. MPC_FROM_FOMA (i-mode 絵文字)
  2. MPC_FROM_EZWEB (au 絵文字)
  3. MPC_FROM_SOFTBANK (SoftBank 絵文字)

※掲示板等の場合、UserAgentで判断すると良いかも


【第三引数】 (必須)

第一引数で指定した文字列の文字コード

以下の定数を指定する事が可能です。

  1. MPC_FROM_CHARSET_SJIS (Shift_JIS)
  2. MPC_FROM_CHARSET_UTF8 (UTF-8)


【第四引数】

第一引数で指定した文字列の絵文字体系

以下の定数を指定する事が可能です。

  1. MPC_FROM_OPTION_RAW (バイナリコード) ※デフォルト
  2. MPC_FROM_OPTION_WEB (Web入力コード)
  3. MPC_FROM_OPTION_IMG (imgタグ)

次の行で実際の変換を行います。

以下の1行ですね。

echo $mpc->autoConvert();

autoConvertメソッドは$_SERVER['HTTP_USER_AGENT']からアクセスキャリアを判別し、自動でキャリアに合う絵文字へ変換します。

初心者向けとして、autoConvertは実装しました。

上記だけでは、変換先絵文字キャリアや絵文字の体系を指定出来ません。

変換オプションを自分で設定したい場合には、autoConverメソッドの中身を見てみると幸せになれるかも。

ここまでで分からない事や質問事項があれば、コメントでお願いします。

分からん分からん 2007/11/23 14:32 rysterさん、わざわざ使い方の説明をして頂いてありがとうございます。
でも、私の場合、文字コード変換の問題でつまづいていたようです。絵文字以前の問題でした・・・

PHPがShift_JIS、DBがEUC-JPという環境で、絵文字が?になってしまうのですが、これは文字コードを変換する時に絵文字が壊れてしまってるんですよね?

こういう場合の解決法って何かあるのでしょうか。本件とは関係ない話なのでスルーで全然OKです。

とりあえず使い方のお礼ということで。

なおやなおや 2007/11/23 17:41 分からん氏
>mb_convert_encodingに変換時に”eucJP-win”に変換すると幸せになれるかも知れません

分からん分からん 2007/11/23 20:20 なおやさんのアドバイスのお陰で絵文字を絵文字として表示できるようになりました。
ありがとうございました。

ただauしか持ち合わせていないので各種携帯で相互に見れているのか確認できませんが、
肝心のmpcを通してもPCで確認したときに・のままで表示されます。
これはmpcの設定が間違えてるということですよね。
下記のように設定しているのですが何かおかしなところはありますか?

require_once ’../MobilePictogramConverter.php’;

$useragent = $_SERVER[’HTTP_USER_AGENT’];

if (preg_match(’/^DoCoMo¥/¥d¥.¥d[ ¥/]/’, $useragent)) {
$type = MPC_FROM_FOMA;
} elseif (preg_match(’/^(?:(?:SoftBank|Vodafone|J-PHONE)¥/¥d¥.¥d|MOT-)/’, $useragent)) {
$type = MPC_FROM_SOFTBANK;
} elseif (preg_match(’/^(?:KDDI-[A-Z]+¥d+[A-Z]? )?UP¥.Browser¥//’, $useragent)) {
$type = MPC_FROM_EZWEB;
} else {
$type = MPC_FROM_FOMA;
}

$mpc =& MobilePictogramConverter::factory($str, $type, MPC_FROM_CHARSET_SJIS);
$mpc->setImagePath(’../img/’);
echo $mpc->autoConvert();

分からん分からん 2007/11/23 20:34 $useragentを間違えていました。
お騒がせして申し訳ありませんでした。

なおやなおや 2007/11/24 01:43 分からん氏

よかったです。
ちなみに私はDoCoMo/SoftBank携帯しか持ち合わせていなかったのですが、
自身の運営するサイトでAUでの投稿が出来てないみたいです。
↑まぁ掲示板などでも動いてるようなので私の実装ミスなんでしょうが・・・
っという訳で明日AUで実機買ってきます><

以下の携帯で何か確認してほしい事があるなら、確認します。
DoCoMo -> P903iTV
SoftBank -> 920SH

ここに書くのはあれでしょうから、もし試してほしいことがありましたら、
捨てアド乗せて貰えれば、連絡します。
------------------------------------------------------------------
ryster氏
ブログ汚し失礼します

なおやなおや 2007/11/24 02:19 分からん氏

上のサンプル見て少し気になったのですが、

MobilePictogramConverter::factoryに渡すのは文字列の中に含まれている絵文字の種類ですので、UAを見て引数を変えるのは、見にきた人のキャリアを渡す事になると思いますので、使い方が違うような気もします。
※もしそれを踏まえた上でのサンプルでしたらご容赦下さい。

分からん分からん 2007/11/24 09:10 なおやさんのご指摘通りでして、その後、投稿した人のキャリアを渡すようにしたのですが、【第二引数】の変数にMPC_FROM_FOMA(あるいはMPC_FROM_SOFTBANKやMPC_FROM_EZWEB)が代入されると下記エラーが出てしまいます。

Call to a member function on a non-object

しかし変数にFOMA(あるいはSOFTBANKやEZWEB)といったキャリア名だけが代入されると絵文字が表示されます。

私の設定がおかしいはずなのですがどこが原因なのか分かりません。

もう一度最初からやってみるつもりですがもし何かお気づきの点などありましたらアドバイス頂けると助かります。

なおやなおや 2007/11/24 09:57 MPC_FROM_FOMAと言っても、実際には”MobilePictogramConverter.php”にて

define(’MPC_FROM_FOMA’ , ’FOMA’);
define(’MPC_FROM_EZWEB’ , ’EZWEB’);
define(’MPC_FROM_SOFTBANK’, ’SOFTBANK’);

上記のように固定値として定義しているだけですので、
$i = ’FOMA’;
$i = MPC_FROM_FOMA;
この二つは同じ意味になります。

MPC_**** を変数に代入する関数等で
require_once ’../MobilePictogramConverter.php’;
定義してみてもダメですかね?

分からん分からん 2007/11/24 18:17 なおやさん、アドバイスありがとうございます。
定義してあるのですがダメみたいです。
確実に私が間違えているので色々とやってみることにします。
どうもありがとうございました。

ひでまんひでまん 2007/11/25 00:35 ミクシーみたいに、PCから絵文字を入力することはできないのか?

と思って試行錯誤した結果、できそうです。

http://www.nttdocomo.co.jp/service/imode/make/content/pictograph/tool/

から絵文字入力するのをダウンロードして絵文字をフォームに入力することでできました。

これを javascript と連携し、mixi みたいにできるようにしたいと思っておりますのでできましたらまたご報告
させて頂きます。

ちなみに絵文字入力は
http://www.nttdocomo.co.jp/service/imode/make/content/pictograph/basic/index.html

の数字やコードをコピペするだけではアルファベットがそのまま表示されるだけでできませんでした。

たしろたしろ 2007/11/26 05:25 初歩的な質問ですみません。
もしかして、既にcommon.phpを設置しているサイトにMPCを導入すると、common.php同士で競合が発生しちゃったりしますか?

たしろたしろ 2007/11/26 05:59 重ね重ね質問すみません。
現在、ヒアドキュメントで長文を読み込ませているページがあるのですが、絵文字を【ところどころに】表示させたいのです。

つまり、以下のようにしたいのです。(●が絵文字表示箇所)

print <<<body
<html>
<body>
あいうえお●<br />
あ●いうえお<br />
あいう●えお<br />
●あいうえお<br />
あいうえお●
</body>
</html>
body;

これを実現するためには・・・どうすればよいのでしょうか?
一行一行、全てecho文で記述し直さなければならないのでしょうか。

もし、お時間があればどなたかご教授お願い致します。
ご迷惑おかけします。

rysterryster 2007/11/26 17:07 rysterです。

>>たしろさん
スクリプトの先頭で、以下の様に定義して下さい。

ob_start();

で、スクリプトの最終行を以下の様に。

$output = ob_get_contents();
ob_end_clean();

$mpc =& MobilePictogramConverter::factory($output, $type, $charset);
echo $mpc->autoConvert();

でどうでしょう。

rysterryster 2007/11/26 20:59 もしくは1回変数に入れるとか。

$body = <<<body
<html>
<body>
あいうえお●<br />
あ●いうえお<br />
あいう●えお<br />
●あいうえお<br />
あいうえお●
</body>
</html>
body;

ひでまんひでまん 2007/11/26 21:47 登録後の確認画面をはさんだり、保存先をDBにしたりして使ってみましたが、正常に動作しました!

でもってPCから絵文字を入力することができましたんでご報告させて頂きます。
サンプル http://www.okws.jp/orijinal/mobilepictogram/dbver.php

わかりづらいですけど、一応解説。。。
http://www.hideblog.net/item_26.html

まぁ絵文字足らないのがいくつかありますが、そこはご愛嬌ということで^^

たしろたしろ 2007/11/27 00:41 >>rysterさん
大変お忙しいところ恐縮です。ありがとうございます。

>もしくは1回変数に入れるとか

早速、以下のようにしてみました。
無事にちゃんと見れはしたのですが、果たしてこの記述方法で正解なのでしょうか?
(何か足りないものとか、ございませんでしょうか)

<?php
require_once(’./mpc/MobilePictogramConverter.php’);

$body =<<<body
<?xml version=”1.0” encoding=”Shift_JIS”?>
<!DOCTYPE html PUBLIC ”-//i-mode group(ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/1.0) 1.0//EN” ”i-xhtml_4ja_10.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”ja”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=Shift_JIS” />
<title>テスト</title>
</head>

<body>
あいうえお??<br />
あ?}いうえお<br />
あいうえ?|お<br />
瘕あいうえお<br />
あいう瘈えお<br />
</body>
</html>
body;

$mpc =& MobilePictogramConverter::factory($body, MPC_FROM_FOMA, MPC_FROM_CHARSET_SJIS);
echo $mpc->autoConvert();

?>

お時間のある時で結構です。どうぞご教授お願い致します。

たしろたしろ 2007/11/27 00:47 あちゃ・・・バイナリの絵文字をそのままコピペしてしまったために、文字化けしてしまいました。

あ、確認なんですが以下の●の部分、ここはバイナリの絵文字をDoCoMoの絵文字入力ツールなどからポンポンと入力していくだけで良いのですよね?

あいうえお●<br />
あ●いうえお<br />
あいう●えお<br />
●あいうえお<br />
あいうえお●

・・・もしかして、pack(’H*’, ’F89F’);のような形で指定しないといけないのでしょうか?

というか、板汚しホント申し訳ないです、すみません。
どうしてもこのスクリプトを使わせていただきたくて;

rysterryster 2007/11/27 01:32 rysterです。

>早速、以下のようにしてみました。
>無事にちゃんと見れはしたのですが、果たしてこの記述方法で正解なのでしょうか?

問題ないです。

>・・・もしかして、pack(’H*’, ’F89F’);のような形で指定しないといけないのでしょうか?
いいえ、バイナリコードで問題ありません。

たしろたしろ 2007/11/28 00:41 >>rysterさん
ありがとうございます。助かりました。
早速、友人にもMPCの存在を知らせてやろうと思います。

こんな素人に大変丁寧に教えて下さり、感謝しております。
本当にありがとうございました。

分からん分からん 2008/01/14 22:46 クラスの意味がよくわかっていないためだと思うのですが、既存のtemplateにどうやってMPCを組み込めばいいのか分かりません。

$mpc =& MobilePictogramConverter::factory($row[content], $UserAgent, MPC_FROM_CHARSET_SJIS);

$tpl->assign(array(
main_content => $mpc
));

このようにしてもObjectやThe file doesn’t exist.という文字が表示されてしまいます。

クラスの使い方などもネットで調べてみたのですがうまく理解できません。

どなたかアドバイスいただけないでしょうか。

分からん分からん 2008/01/15 10:33 すいません、解決しました。
意味のないコメントばかり書いてしまいまして申し訳ありませんでした。
削除して頂けると幸いです・・

mekemokemekemoke 2008/01/18 16:07 素敵なライブラリをありがとうございます。
表示はSJIS、DB(Postgres)はEUCの環境で作業していますが、
auの絵文字は入ったものの、パソコンからの絵文字入力(i絵文字を使用)時に、
UNICODE形式?に変換されてしまいます。
たとえば、太陽のマークはバイナリ形式にもならず、と変換されます。
何か解決方法があればご教示いただけると幸いです。

ちなみに上記、分からんさんと同様の問題にぶつかってしまったのですが、
MobilePictogramConverter.php を移動するときは
Carrierディレクトリとその中身も一緒に移動させる必要があるのですね。

rysterryster 2008/01/18 18:18 >>makemokeさん

>たとえば、太陽のマークはバイナリ形式にもならず、と変換されます。
PCからとなっていますが、Firefoxから絵文字を入力していますか?
Firefoxから絵文字を入力する場合、強制的にその形式に変換される気がします。(恐らく、設定などがあるのかもしれませんが。)

>Carrierディレクトリとその中身も一緒に移動させる必要があるのですね。
全てのファイルを移動させなくてはいけません。(include_pathに設定されているディレクトリであれば、問題ないですが。)

>>ALL
尚、現在、ezwebの変換にて一部のマルチバイト文字を絵文字と誤判定し、変換処理をしてしまうバグが発生しております。
他のバグも含め、修正している最中ですので、今暫くアップデートまでお待ち頂ければと思います。

mekemokemekemoke 2008/01/21 11:42 お忙しいところ恐縮です。
素早いご回答、ありがとうございました!

ご指摘の通り、Firefoxからの入力です。ここはブラウザ依存なのですね。調査してみます。
回避方法をこちらで先に発見できましたら、ご報告いたしますね。

> include_pathに設定されているディレクトリであれば問題なし
ライブラリとして、PEARと同じような扱いになるわけですね。
PHPは自分が使うところのみ必要に駆られて独学でかじっているので、勉強になりました。

アップデート時には、ぜひ導入させていただきますので、
よろしくお願いいたします。

mekemokemekemoke 2008/01/21 11:56 連続投稿すいません。
すでに解決済みかもしれませんが、一応書き記しておきます。

下記が参考になりますね。
http://ke-tai.org/blog/2007/11/24/iemoji_conv2/

あとはブラウザがFirefoxかどうかを判別して、この処理を追加すればOKですね。

理想は、パソコンの画面からWHISYWIGエディタとして絵文字を登録することです。
rysterさんのおかげでだいぶ道のりが短くなりました。
重ねてお礼申し上げます。

hidekihideki 2008/05/14 14:20 こんにちわ。1.2ダウンロードさせて頂きましてありがとうございます。

現在 cakephp を利用し
UTF-8 でコードを作り SJIS ではき出す という作りをしているのですが、絵文字が正常に表示されませんでした。

で、autoconvert の中身の ezweb を
$option = MPC_TO_OPTION_WEB;
に変更。

で、表示させたいview に
$str = ’’; // DoCoMo 絵文字 (太陽のマーク)
$mpc =& MobilePictogramConverter::factory($str, MPC_FROM_FOMA, MPC_FROM_CHARSET_UTF8);
echo $mpc->autoConvert();

で正常に表示できました。

応援してます。今後ともよろしくお願いします。

bicycle8080bicycle8080 2008/07/14 21:50 はじめまして☆
いつもお世話になっています。

ここのテスト掲示板の入力は文字列の中に絵文字があっても対応できてますよね?
文字列から絵文字を抽出して、このMPCに入力する方法がわからないのですが、おしえていただけますでしょうか…

bicycle8080bicycle8080 2008/07/15 15:24 昨日の件、解決しました。くだらない質問で申し訳ありませんでいした。
ところで、auから入力した絵文字をdocomoで表示させたとき、表示されないのですが…

auから入力させて、DBに格納するとこのような表記になりますよね?
こちらのexampleにあるのはEEBD89EF83B3EEB2A1EE…こういったデータ表記。

上記のものですと、さっぱり表示されません。
なにか解決方法とかはありますでしょうか?

どなたか、ご教授くださいませ。

minmiminmi 2008/09/05 22:02 使い方について、質問させてください。
このライブラリで、「どのキャリアかわからない絵文字」を変換する事は難しいでしょうか?
別で言えば、「3キャリア全ての絵文字が含まれた文字列」を1キャリアで見るように一発変換する事は難しいでしょうか・

tsubakurotsubakuro 2008/09/08 17:38 i絵文字ソフトから絵文字入力するが「?」としか書き込まれません。
サンプルの「絵文字掲示板」を使用しても同様です。
表示の他に、書き込む場合のサンプルソースを詳しく解説したサイトは無いものでしょうか?

宜しくお願いいたします。

tsubakurotsubakuro 2008/09/08 22:03 mb_substitute_character(”long”);
を追加すると
BAD+F89F
このような値で取得されますが、「バイナリコード(F89F)」に変換する方法をご教授ねがえないでしょうか?

以下の$1をバイナリコードに変換できません!?
preg_replace(”/BAD¥+([a-zA-Z0-9]{4})/”,”$1”,$data);

??
$str = pack(’H*’, ’F89F’);

tsubakurotsubakuro 2008/09/08 22:52 以下の方法で出来そうです。(^^)

方法?

mb_substitute_character(”long”);

/* バイナリコード変換 */
function emojiPack($match)
{
return pack(’H*’, $match[1]);
}
/* 文字コード変換 EUC-JP → SJIS */
function euc2sjis_for_Winodows($data){
if(!isset($data)){ return;}
if(preg_match(”/Windows/”, $_ENV[”OS”])){
if(is_array($data)){
foreach($data as $key => $val){
$data[$key] = mb_convert_encoding( $key,”SJIS”, ”EUC-JP”);
}
}else{
$data = mb_convert_encoding( $data,”SJIS”, ”EUC-JP”);
}
return $data;
}
}

$r_data = preg_replace_callback( ”/BAD¥+([0-9A-F]{4})/”, ”emojiPack”, euc2sjis_for_Winodows($_POST[’data’])) ;

方法?

mb_substitute_character(”long”);

/* Web入力コード変換 */
function emojiEncInput($match)
{
global $career ;
$head = ”&#” ;
if( $career == ”softbank” )
$head = ”&!” ;
return sprintf( ”%s%s;”, $head, hexdec( $match[1] ) ) ;
}
/* 文字コード変換 EUC-JP → SJIS */
function euc2sjis_for_Winodows($data){
if(!isset($data)){ return;}
if(preg_match(”/Windows/”, $_ENV[”OS”])){
if(is_array($data)){
foreach($data as $key => $val){
$data[$key] = mb_convert_encoding( $key,”SJIS”, ”EUC-JP”);
}
}else{
$data = mb_convert_encoding( $data,”SJIS”, ”EUC-JP”);
}
return $data;
}
}

$r_data = preg_replace_callback( ”/BAD¥+([0-9A-F]{4})/”, ”emojiEncInput”, euc2sjis_for_Winodows($_POST[’data’])) ;

tsubakurotsubakuro 2008/09/12 23:16 こんにちは。たびたびすいません。

iモード用絵文字(docomo)は、うまく新規投稿および編集はできました。
auおよびSoftBankの場合、どうもうまく動作しません。
皆さんは、どう言うロジックにされていますか?


/* Web入力コードに変換 */
function emojiWrite($match)
{
$career = Utility::careerIn($_SERVER[”HTTP_USER_AGENT”]);
if ($career == ’au’) {
return sprintf(”<img localsrc=¥”%s¥”>”, hexdec($match[1]));
} elseif ($career == ’SoftBank’) {
return pack(’H*’, ’1B24’.$match[1].’0F’);
} else {
return sprintf(”%s%s;”, ’&#’, hexdec($match[1]));
}
}
/* FORMから受信 */
mb_substitute_character(’long’);
$_POST[”mes”] = mb_convert_encoding($_POST[”mes”], ”SJIS”, mb_internal_encoding());
$_POST[”mes”] = preg_replace_callback(”/BAD¥+([0-9A-F]{4})/”, ”emojiWrite”, $_POST[”mes”]);
$_POST[”mes”] = preg_replace_callback(”/¥x1B¥$([E-GO-Q][!-z])¥x0F/”, ”emojiWrite”, $_POST[”mes”]);

tsubakurotsubakuro 2008/09/13 15:17 絵文字テスト中!?
http://www.nice-buddy.com/php-libs/module/linebbs/index.php

tsubakurotsubakuro 2008/09/17 15:26 絵文字入力スクリプトを作成して見ました。
ご自由に改変してください。

<form name=”_form” 〜>
$emoji = $this->emoji();
<textarea name=”mes” 〜>〜</textarea>
</form>

http://www.nice-buddy.com/php-libs/module/linebbs/i-emoji1.gif
http://www.nice-buddy.com/php-libs/module/linebbs/i-emoji2.gif
http://www.nice-buddy.com/php-libs/module/linebbs/i-emoji3.gif

<?php
function emoji()
{
$i_emoji_hex = array(
’F89F’,’F8A0’,’F8A1’,’F8A2’,’F8A3’,’F8A4’,’F8A5’,’F8A6’,’F8A7’,’F8A8’,’F8A9’,
’F8AA’,’F8AB’,’F8AC’,’F8AD’,’F8AE’,’F8AF’,’F8B0’,’F8B1’,’F8B2’,’F8B3’,’F8B4’,
’F8B5’,’F8B6’,’F8B7’,’F8B8’,’F8B9’,’F8BA’,’F8BB’,’F8BC’,’F8BD’,’F8BE’,’F8BF’,
’F8C0’,’F8C1’,’F8C2’,’F8C3’,’F8C4’,’F8C5’,’F8C6’,’F8C7’,’F8C8’,’F8C9’,’F8CA’,
’F8CB’,’F8CC’,’F8CD’,’F8CE’,’F8CF’,’F8D0’,’F8D1’,’F8D2’,’F8D3’,’F8D4’,’F8D5’,
’F8D6’,’F8D7’,’F8D8’,’F8D9’,’F8DA’,’F8DB’,’F8DC’,’F8DD’,’F8DE’,’F8DF’,’F8E0’,
’F8E1’,’F8E2’,’F8E3’,’F8E4’,’F8E5’,’F8E6’,’F8E7’,’F8E8’,’F8E9’,’F8EA’,’F8EB’,
’F8EC’,’F8ED’,’F8EE’,’F8EF’,’F8F0’,’F8F1’,’F8F2’,’F8F3’,’F8F4’,’F8F5’,’F8F6’,
’F8F7’,’F8F8’,’F8F9’,’F8FA’,’F8FB’,’F8FC’,’F940’,’F941’,’F942’,’F943’,’F944’,
’F945’,’F946’,’F947’,’F948’,’F949’,’F94A’,’F94B’,’F94C’,’F94D’,’F94E’,’F94F’,
’F950’,’F951’,’F952’,’F953’,’F954’,’F955’,’F956’,’F957’,’F958’,’F959’,’F95A’,
’F95B’,’F95C’,’F95D’,’F95E’,’F95F’,’F960’,’F961’,’F962’,’F963’,’F964’,’F965’,
’F966’,’F967’,’F968’,’F969’,’F96A’,’F96B’,’F96C’,’F96D’,’F96E’,’F96F’,’F970’,
’F971’,’F972’,’F973’,’F974’,’F975’,’F976’,’F977’,’F978’,’F979’,’F97A’,’F97B’,
’F97C’,’F97D’,’F97E’,’F980’,’F981’,’F982’,’F983’,’F984’,’F985’,’F986’,’F987’,
’F988’,’F989’,’F98A’,’F98B’,’F98C’,’F98D’,’F98E’,’F98F’,’F990’,’F991’,’F992’,
’F993’,’F994’,’F995’,’F996’,’F997’,’F998’,’F999’,’F99A’,’F99B’,’F99C’,’F99D’,
’F99E’,’F99F’,’F9A0’,’F9A1’,’F9A2’,’F9A3’,’F9A4’,’F9A5’,’F9A6’,’F9A7’,’F9A8’,
’F9A9’,’F9AA’,’F9AB’,’F9AC’,’F9AD’,’F9AE’,’F9AF’,’F9B0’,’F9B1’,’F9B2’,’F9B3’,
’F9B4’,’F9B5’,’F9B6’,’F9B7’,’F9B8’,’F9B9’,’F9BA’,’F9BB’,’F9BC’,’F9BD’,’F9BE’,
’F9BF’,’F9C0’,’F9C1’,’F9C2’,’F9C3’,’F9C4’,’F9C5’,’F9C6’,’F9C7’,’F9C8’,’F9C9’,
’F9CA’,’F9CB’,’F9CC’,’F9CD’,’F9CE’,’F9CF’,’F9D0’,’F9D1’,’F9D2’,’F9D3’,’F9D4’,
’F9D5’,’F9D6’,’F9D7’,’F9D8’,’F9D9’,’F9DA’,’F9DB’,’F9DC’,’F9DD’,’F9DE’,’F9DF’,
’F9E0’,’F9E1’,’F9E2’,’F9E3’,’F9E4’,’F9E5’,’F9E6’,’F9E7’,’F9E8’,’F9E9’,’F9EA’,
’F9EB’,’F9EC’,’F9ED’,’F9EE’,’F9EF’,’F9F0’,’F9F1’,’F9F2’,’F9F3’,’F9F4’,’F9F5’,
’F9F6’,’F9F7’,’F9F8’,’F9F9’,’F9FA’,’F9FB’,’F9FC’
);
$emoji = ”<div class=¥”emoji¥”><img src=¥”../img/i-emoji2.gif¥” width=¥”540¥” height=¥”120¥” usemap=¥”#i-emoji¥” alt=¥”i絵文字をクリック¥” /></div>¥n<map name=¥”i-emoji¥”>¥n”;
$x1 = 3;
$y1 = 2;
$x2 = 19;
$y2 = 18;
for($i=1; $i<=282; $i++)
{
$j = $i - 1;
$i_emojipack = pack(’H*’, $i_emoji_hex[$j]);
$emoji = $emoji.”<area shape=¥”rect¥” coords=¥”$x1,$y1,$x2,$y2¥” onclick=¥”document._form.mes.value+=’”.$i_emojipack.”’;document.forms[’_form’].elements[’mes’].focus();¥”>¥n”;
$x1 += 15;
$x2 += 15;
if ($i % 36 == 0) { $x1=3; $x2=19; $y1+=15; $y2+=15; }
}
$emoji = $emoji.”</map>¥n”;
return $emoji;
}
?>

tsubakurotsubakuro 2008/09/19 12:11 以下のテストスクリプトに組み込みました♪
当分の間、公開します。自由に改編してください♪
http://www.nice-buddy.com/php-libs/module/linebbs/

bonbon 2009/03/10 16:19 はじめまして。
最近PHPの勉強をしているbonと申します。
素敵なライブラリをありがとうございます。

初歩的な質問で申し訳ございません。
もしよろしければご教授お願いいたします。

絵文字を一つずつ変換するとタグが多くなり管理が難しくなっていきそうなので、一括で変換したいと考えています。
過去のコメントを拝見させていただき、いろいろ試したのですがうまく動作いたしませんでした。
現状は一つずつコンバートしている状態で、これだと問題なく動作いたします。

※※※※※※※※※現状※※※※※※※※※※※※※※

<?php

if (ereg("DoCoMo", $_SERVER['HTTP_USER_AGENT'])) {
header('Content-Type: application/xhtml+xml');
}

require_once("MobilePictogramConverter.php");

$keyword = "☆☆☆☆☆☆";
$description = "☆☆☆☆☆☆";

include("./inc_temp.php");
echo $header;

?>

<!--コンテンツタイトル開始-->
<div <?php echo $div_style_bg; ?>>
<?php
$str = pack('H*', 'F982'); // DoCoMo 絵文字 (NEWのマーク)
$mpc =& MobilePictogramConverter::factory($str, MPC_FROM_FOMA, MPC_FROM_CHARSET_SJIS);
echo $mpc->autoConvert();
?>
コンテンツタイトル</div>
<!--コンテンツタイトル終了-->
<!--コンテンツ内容開始-->
<div <?php echo $div_style_content_bg; ?>>


<?php
$str = pack('H*', 'F8EF'); // DoCoMo 絵文字 (スペードのマーク)
$mpc =& MobilePictogramConverter::factory($str, MPC_FROM_FOMA, MPC_FROM_CHARSET_SJIS);
echo $mpc->autoConvert();
?>
コンテンツ内容
<?php
$str = pack('H*', 'F8F9'); // DoCoMo 絵文字 (足のマーク)
$mpc =& MobilePictogramConverter::factory($str, MPC_FROM_FOMA, MPC_FROM_CHARSET_SJIS);
echo $mpc->autoConvert();
?>




</div>
<!--コンテンツ内容終了-->
<!--footer開始-->
<div <?php echo $div_style_go_to_top; ?>>
<?php echo $go_to_top; ?></div>
<div <?php echo $div_style_bg; ?>>


<?php echo $footer; ?>




</div>
<!--footer終了-->
</body>
</html>

※※※※※※※※※※※※※※※※※※※※※※※※※


※※※※※ryster様の参考にしたコメントを引用※※※
$body = <<<body
<html>
<body>
あいうえお●<br />
あ●いうえお<br />
あいう●えお<br />
●あいうえお<br />
あいうえお●
</body>
</html>
body;
※※※※※※※※※※※※※※※※※※※※※※※※※


※※※※※※一括で変換するために修正したもの※※※

<?php

if (ereg("DoCoMo", $_SERVER['HTTP_USER_AGENT'])) {
header('Content-Type: application/xhtml+xml');
}

require_once("MobilePictogramConverter.php");


$keyword = "☆☆☆☆☆☆";
$description = "☆☆☆☆☆☆";

include("./inc_temp.php");
echo $header;

?>

<!--コンテンツタイトル開始-->
<div <?php echo $div_style_bg; ?>>
<?php
$str = pack('H*', 'F982'); // DoCoMo 絵文字 (NEWのマーク)
$mpc =& MobilePictogramConverter::factory($str, MPC_FROM_FOMA, MPC_FROM_CHARSET_SJIS);
echo $mpc->autoConvert();
?>
コンテンツタイトル</div>
<!--コンテンツタイトル終了-->
<!--コンテンツ内容開始-->
<div <?php echo $div_style_content_bg; ?>>


<?php
$str = pack('H*', 'F8EF'); // DoCoMo 絵文字 (スペードのマーク)
$mpc =& MobilePictogramConverter::factory($str, MPC_FROM_FOMA, MPC_FROM_CHARSET_SJIS);
echo $mpc->autoConvert();
?>
コンテンツ内容
<?php
$str = pack('H*', 'F8F9'); // DoCoMo 絵文字 (足のマーク)
$mpc =& MobilePictogramConverter::factory($str, MPC_FROM_FOMA, MPC_FROM_CHARSET_SJIS);
echo $mpc->autoConvert();
?>




</div>
<!--コンテンツ内容終了-->
<!--footer開始-->
<div <?php echo $div_style_go_to_top; ?>>
<?php echo $go_to_top; ?></div>
<div <?php echo $div_style_bg; ?>>


<?php echo $footer; ?>




</div>
<!--footer終了-->
</body>
</html>
<?php
body;
$mpc =& MobilePictogramConverter::factory($body, MPC_FROM_FOMA, MPC_FROM_CHARSET_SJIS);
echo $mpc->autoConvert();
?>

※※※※※※※※※※※※※※※※※※※※※※※※※


※※※※※※※※inc_temp.phpの中身※※※※※※※※

<?php
$xml_v = "<?xml version=\"1.0\" encoding=\"Shift_JIS\" ?>";
$title = "☆☆";
$site_name = "aaaa";
$fontsize_css = "12pt";
$body_text = "#333333";
$body_bg = "#ffffff";
$body_link = "#ff3366";
$body_vlink = "#ff3366";
$body_alink = "";


/*各ページのヘッダー情報*/
$header = <<< TAGSET
{$xml_v}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<base href="http://aaaaa.jp/" />
<meta http-equiv="content-Type" content="application/xhtml+xml; charset=SJIS-win" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<meta name="robots" content="index,follow" />
<title>{$title}</title>
<meta content="{$keyword}" name="keywords" />
<meta content="{$description}" name="description" />
<link rel="alternate" media="handheld" href="alternate_page.htm" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<style type="text/css">
<![CDATA[
.small {font-size: {$fontsiza_css};}
a:link{color: {$body_link};}
a:visited{color: {$body_vlink};}
a:focus{color: {$body_alink};}
]]>
</style>
</head>
<body text="{$body_text}" bgcolor="{$body_bg}" link="{$body_link}" vlink="{$body_vlink}" alink="{$body_alink}">
TAGSET;

/*横線スタイル 細い*/
$hr01 = "<hr size=\"1\" color=\"#ffcc33\" style=\"width:100%;height:1px;margin:2px 0;padding:0;color:#ffcc33;background:#ffcc33;border:0px solid #ffcc33;\" />";

/*Div スタイル ページTOPに移動*/
$div_style_go_to_top = "style=\"text-align:right;font-size:x-small;\" align=\"right\" class=\"small\"";

/*コンテンツ背景*/
$div_style_content_bg = "style=\"font-size:x-small; background-color:#FFC;\" class=\"small\"";

/*ページTOPに移動*/
$go_to_top = "<a href=\"#top\" accesskey=\"#\">↑ページトップ[#]</a>";

/*フッター、ヘッダー背景*/
$div_style_bg = "color=\"#ffff66\" style=\"background-color:#ffff66; text-align:center;font-size:x-small; color:#000000;\" bgcolor=\"#ffff66\" class=\"small\"";

/*現在の西暦*/
$year = date(Y);

/*各ページのコピーライト表記*/
$footer = <<< TAGSET
Copyright © 2004-{$year}. {$site_name} All Rights Reserved.
TAGSET;
?>

※※※※※※※※※※※※※※※※※※※※※※※※※

おそらく
$body =<<<body
が問題と思いますが、その場合どのように書けばいいのでしょう。

初歩的な質問で申し訳ございません。
どうかよろしくお願いいたします。

lovecash.jplovecash.jp 2009/03/20 23:30 これ使ってみました。
助かりました。感謝の気持ちに私の使い方を書きます。


データがポストされてきて、それをDBに入れて、出力させる。というプロセスをプログラムしてます。
サイトはSJIS DBはUTF8でpostgresです。
<?
/*
絵文字入力部分
postされてきた絵文字入りテキストをDBに入れます。
絵文字と投稿時に利用されたキャリアの2つを入れます。
*/
$str="POSTされてきた絵文字入りテキスト";
mb_substitute_character("long");
$str=mb_convert_encoding($str,"UTF8","SJIS");
$carrier=carrier();
$sql="INSERT INTO test (str,carrier) VALUES ('$str','$carrier')";

/*
絵文字出力部分
postされてきた絵文字入りテキストをDBに入れます。
絵文字と投稿時に利用されたキャリアの2つを入れます。
*/
//DBから$strと$carrierをselectしてきます。
require_once '../../MobilePictogramConverter/MobilePictogramConverter.php';
$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();
//$str = strip_tags($str);
echo $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;
}


//DBから取り出した絵文字が、どのキャリアから登録されたものかを確認する関数
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;
}

function conv($match) {
return pack('H*',$match[1]);
}
?>

Connection: close