OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

iモードの絵文字16進数の正規表現について

  • すぐに回答を!
  • 質問No.168667
  • 閲覧数276
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 93% (78/83)

iモードの絵文字をフォームから送信された時の処理をperlでしています。
具体的にはフォーム内容をデコードする前に、文章に絵文字が含まれているか16進数の状態でチェックします。含まれていれば、それらを10進数表記に変え、データとして保存しています。
ここまでは上手くいったのですが、問題が発生しました。
iモードからはShift_JISでデータが送信されてきますが、このデータの中に2バイト目の文字コードが絵文字の1バイト目の文字コードと同じであり、かつその次の文字の1バイト目が絵文字の2バイト目と同じだった場合に間違ってその文字を絵文字として処理してしまいます。
つまりある2文字の2バイト目と1バイト目が偶然絵文字と同じ文字コードだった場合に絵文字として取り扱ってしまうのです。(例:滲滲)
これを防ぐ方法が解る方がいらっしゃればご回答下さいm(_ _)m

※perlメモの「ただしくパターンマッチさせる」をShift_JISに変えてやってみましたが、うまくいきませんでした。。。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル11

ベストアンサー率 31% (72/232)

単なるパターンマッチでは上手く行かないので私は以下のようなスクリプトを書きました。参考にして下さい。

sub han2zen{

local($input_string) = @_;
$temp_string = '';#空の文字変数を用意
$temp_position = 0;
$sjis_flag = 0;

$zenkana_table = '。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜';
&jcode'convert(*zenkana_table,"sjis");

while($temp_position < length($input_string)){
$temp_figure = substr($input_string,$temp_position,1);

#sjisの上位バイト
if ($sjis_flag == 1){
$temp_string = $temp_string.$temp_figure;
$sjis_flag = 0;
}elsif (ord($temp_figure) >=129 && ord($temp_figure) <= 159 || ord($temp_figure) >=224 && ord($temp_figure) <= 239){
$sjis_flag = 1;
$temp_string = $temp_string.$temp_figure;
}elsif (ord($temp_figure) >=248 && ord($temp_figure) <= 249){
$temp_position++;
$sjis_code = ord($temp_figure)*256+ord(substr($input_string,$temp_position,1));
#$temp_string = $temp_string."&#$sjis_code;".chr(59);
$temp_string = $temp_string."&#$sjis_code\x3b";
}elsif (ord($temp_figure) >=161 && ord($temp_figure) <= 223){
$temp_string = $temp_string.substr($zenkana_table,(ord($temp_figure)-161)*2,2);
}else{
$temp_string = $temp_string.$temp_figure;
}
$temp_position++;
}
$temp_string;
}
お礼コメント
kodai_sumio

お礼率 93% (78/83)

返事が遅くなってしまってスイマセン!
とても参考になりました。ありがとうございました。
投稿日時 - 2001-11-22 15:26:14
-PR-
-PR-
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ