PHPの正規表現で

テキストエリアにHTMLコードで携帯の絵文字コードを
10進法で入力された場合に
その10進法の値を
取得したいのですがどうしたらいいのでしょうか?

回答の条件
  • 1人5回まで
  • 登録:2008/05/14 15:01:46
  • 終了:2008/05/21 15:05:02

回答(2件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/05/14 18:19:49

ポイント35pt

NTT DoCoMo の「基本絵文字」の場合、下記のようになります。

&#63(6((4[7-9])|([5-9][0-9]))|(7[0-9][0-9])|(8(([0-2][0-9])|3[0-8])));

基本絵文字の範囲が ~丹 ということを表現していますが、ちょっとややこしいです。個人的には、HTMLの10進コード指定を取り出して、整数の範囲判断をした方がメンテナンスがしやすいと思います。


ソフトバンク、auなどについては同様にできると思います。各々のキャリアの絵文字仕様をご確認ください。

id:hopefully

上記をどのように使用したらいいでしょうか?

2008/05/14 19:02:44
id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332008/05/14 19:30:27

ポイント35pt

入力されたテキストを $str とすると、下記のようなスクリプトを用意します。

$cd = 0;
$pat1 = "&#63(6((4[7-9])|([5-9][0-9]))|(7[0-9][0-9])|(8(([0-2][0-9])|3[0-8])));";
$pat2 = "[0-9]{5}";
if (mb_ereg($pat1, $str, $arr) != FALSE) {
    mb_ereg($pat2, $arr[0], $arr);
    if ($arr[0] >= 63647 && $arr[0] <= 63838)  $cd = $arr[0];
}

10進数の絵文字コードがあれば、$cd にコード値(整数)が入ります。無ければ 0 です。

文字セットはSJIS限定です。


この方法の制約は、$str に複数の絵文字コードがある場合、最初のものしかピックアップできないことです。

hopefullyさんが設定した回答回数制限を迎えましたので、これにて失礼します。


追伸

#1の回答で文字化けを起こしていました。訂正します。

基本絵文字の範囲が &#63647;~&#63838; ということを表現していますが
id:hopefully

ありがとうございます。

複数の絵文字コードを取得したいのですが

どうすればいいでしょうか?

回答数制限変更しました。

2008/05/15 00:42:41

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません