• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:iモードの絵文字16進数の正規表現について)

iモードの絵文字16進数の正規表現とは?

このQ&Aのポイント
  • iモードの絵文字をフォームから送信された時の処理をperlでしています。具体的には絵文字が含まれているか16進数の状態でチェックし、変換してデータとして保存します。
  • しかし、Shift_JISエンコーディングのデータ内で特定の文字の組み合わせが絵文字として誤認識される問題が発生しています。
  • これを防ぐ方法について、ご教示いただける方がいらっしゃいましたら、ご教示いただきたいです。

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

  • ベストアンサー
  • kazu-kun
  • ベストアンサー率31% (72/232)
回答No.1

単なるパターンマッチでは上手く行かないので私は以下のようなスクリプトを書きました。参考にして下さい。 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
質問者

お礼

返事が遅くなってしまってスイマセン! とても参考になりました。ありがとうございました。

関連するQ&A

専門家に質問してみよう