- ベストアンサー
iモードの絵文字16進数の正規表現とは?
- iモードの絵文字をフォームから送信された時の処理をperlでしています。具体的には絵文字が含まれているか16進数の状態でチェックし、変換してデータとして保存します。
- しかし、Shift_JISエンコーディングのデータ内で特定の文字の組み合わせが絵文字として誤認識される問題が発生しています。
- これを防ぐ方法について、ご教示いただける方がいらっしゃいましたら、ご教示いただきたいです。
- みんなの回答 (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; }
お礼
返事が遅くなってしまってスイマセン! とても参考になりました。ありがとうございました。