アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつも感謝してますが、また質問してしまいました。
本当に情けないです。。。。

現在携帯サイトを構築しています。
PHP×携帯デベロッパーズバイブルって本の掲示板の一部分なんですが、以下の箇所(具体的には正規表現の箇所)でエラーがでます。
またこの掲示板のスクリプトなんですが、この本自体のサンプルコードはどこかに落ちてないのでしょうか?
できれば、それが一番早いんですが。。。。

/*
* 絵文字の入った入力文字列を内部絵文字の入った文字列に変換する(SoftBankの3GC)
*
* @param integer $data 入力された文字列
* @return string 内部絵文字に変換された文字列
*/
function emoji_text_input_softbank_utf8($data){

//入力文字が空の場合
if(empty($data)){
return $data;
}

$old_data=$data;
$new_data='';

while(1){
if(strlen($old_data)==0){
break;
}
$moji=mb_substr($old_data,0,1,'UTF-8');
$old_data=mb_substr($old_data,1,mb_strlen($old_data),'UTF-8');

//内部絵文字に変換する。
$output=preg_replace_callback('/\xEE([\x80\x81\x84\x85\x88\x89\x8C\x8D\x90\x91\x94][\x80-\xBF])/','emoji_input',$moji);
$new_data.=$output;
}
return $new_data;
}

A 回答 (3件)

No2のサンプルの訂正


$so = "\x0F";
です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
やはり切り替えるための、配列は自作しなきゃいけないんですね。。。
ちょっと大変ですが、やってみます。
最後まで答えていただき本当にありがとうございました。

お礼日時:2009/06/25 18:58

No1のyyr446です。


emoji_input()が無ければ作るしかないですね。

ソフトバンクの絵文字は、x1Bとx0Fでエスケープされた、2バイトのx21~x7Aの文字列でもって、内部の絵文字を表示しているみたいです。

正規表現でマッチさせるパターンの文字列をキーとして対応する内部絵文字コードを値に持つ連想配列を予め準備しておき、関数emoji_input()で絵文字コードを返せばよいわけです。

function emoji_input($matches) {
$si = "\x1B";
$so = "\x1B";
$henkan = array("\xEE\x80\x80" => "\x21\x7A",
         "\xEE\x80\x81" => "\x21\x7B",
   "\xEE\x80\x82" => "\x21\x7C",
・・・・・・・
と対応させたい絵文字を247個設定する
);
return $si . $henkan[$matches[1]] . $so
}
    • good
    • 0

コールバック関数emoji_input()が無いようですが、


ご提示されているソース以外の部分にあるのですか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!