iモードの絵文字をフォームから送信された時の処理をperlでしています。
具体的にはフォーム内容をデコードする前に、文章に絵文字が含まれているか16進数の状態でチェックします。含まれていれば、それらを10進数表記に変え、データとして保存しています。
ここまでは上手くいったのですが、問題が発生しました。
iモードからはShift_JISでデータが送信されてきますが、このデータの中に2バイト目の文字コードが絵文字の1バイト目の文字コードと同じであり、かつその次の文字の1バイト目が絵文字の2バイト目と同じだった場合に間違ってその文字を絵文字として処理してしまいます。
つまりある2文字の2バイト目と1バイト目が偶然絵文字と同じ文字コードだった場合に絵文字として取り扱ってしまうのです。(例:滲滲)
これを防ぐ方法が解る方がいらっしゃればご回答下さいm(_ _)m
※perlメモの「ただしくパターンマッチさせる」をShift_JISに変えてやってみましたが、うまくいきませんでした。。。
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;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 片思い・告白 恋愛相談 4 2023/05/04 07:49
- その他(プログラミング・Web制作) 文字コード及びフォントに関する次の記述を読み,適切なものをすべて選べ。 ASCIIとは,英数字だけを 4 2023/01/11 19:10
- その他(gooサービス) ブログ投稿時の絵文字使用について 2 2023/07/21 14:55
- その他(メンタルヘルス) 就労支援事業所の支援員のメール 2 2023/07/09 06:22
- 友達・仲間 率直に、LINEにて友人の気持ちが良く分かりません。 2 2022/05/28 00:33
- 浮気・不倫(恋愛相談) 今までほとんど絵文字を使わなかった彼氏(好きな人)が最近急に絵文字を使ってくるようになりました。嬉し 1 2022/03/29 14:21
- 片思い・告白 異性とのLINEで 3 2022/12/12 18:34
- 会社・職場 職場の上司と連絡とる際に 「!」や絵文字などの句読点以外の文字を使いますか? 職場の上司は仕事内容で 5 2022/07/30 21:03
- 出会い・合コン マッチングアプリで男性がよく使う絵文字について。 下記画像の絵文字をプロフィールやメッセージによく使 1 2022/04/03 01:33
- 恋愛・人間関係トーク 恋愛相談です 自分は男で、気になる異性と半年近く1日に1往復長文LINE送り合ってるのですが、相手か 2 2022/12/22 12:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++ ファイルからデータを取得
-
strtokでの空文字への置き換え
-
「指定されたキャストは有効で...
-
特定の文字列が一致する行から...
-
Delphiで改行文字の置換がうま...
-
C++のSTL mapを使用するとセグ...
-
C#で型変換
-
System.out.printlnの意味がよ...
-
C言語のポインターに関する警告
-
ループ処理の際、最後だけ","を...
-
eclipseに記述したjavaファイル...
-
System.err. printlnとSystem.o...
-
ダブルクォーテーションを含む...
-
[JAVA]try 内の変数を外で!?
-
Java配列でNullPointerExceptio...
-
javaで質問です。 文字列2023/2...
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
配列にnullを代入すると、null...
-
JSPやサーブレットでSystem.out...
-
[Ljava.lang.Stringってなんですか
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字列が一致する行から...
-
C# ListBoxのアイテムをユーザ...
-
Delphiで改行文字の置換がうま...
-
マルチスレッドで同時にFTPアッ...
-
C#でIPアドレスの取得について
-
【Java8以降】csvファイルの複...
-
strcmp関数などでの複数の文字...
-
strtokでの空文字への置き換え
-
「指定されたキャストは有効で...
-
C#での関数テーブルの作り方
-
string→CStringの型変換について
-
PHPのSHA256変換について
-
C# JSONについて
-
C# visual studio 2017 TCP/IP...
-
GridViewで複数のDropDownList...
-
GDI+ DrawString() で指定範囲...
-
java HashMapで数値データを取...
-
C#で型変換
-
std::stringの継承
-
jap実行時のTomcatのエラーに困...
おすすめ情報