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

半角カナ入力について

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

お礼率 10% (60/582)

perlを使って入力項目を作っている人間です。
ある事に苦戦しています。
半角カナを入力すると文字化けが出てしまうので半角カナを入力しないように注意を促しているのですが、どうしても半角カナを入れてしまう人が入るので、半角カナを入力した時点で、注意事項をCGIで処理したいと思います。
しかし、CGIで処理する場合はどのようにすればいいのか解りません。
何かヒントなどを教えて頂けないでしょうか ?
又参考になるURLなどがありましたら教えて下さい。
お願します。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全4件)

  • 回答No.1

 アスキーコード表を掲載しますので、半角カタカナの文字コードを見てみてください。  このとき、漢字でもなく、なおかつカタカナであるコードが入力された場合に、省くなり全角カタカナに直すなりすればいいのです。  具体的なロジックについては、どこから説明すればいいのか分からないので補足ください(^_^; ...続きを読む
 アスキーコード表を掲載しますので、半角カタカナの文字コードを見てみてください。
 このとき、漢字でもなく、なおかつカタカナであるコードが入力された場合に、省くなり全角カタカナに直すなりすればいいのです。

 具体的なロジックについては、どこから説明すればいいのか分からないので補足ください(^_^;
補足コメント
aeic

お礼率 10% (60/582)

補足です。

$dat ← 全角と半角が混じった文字列データ

# 半角が含まれているかどうかチェックします。
if ( $dat =~ /[\xA1-\xDF]*/ ) {

ここで、半角カタカナが含まれているという
メッセージを出して処理を停止する。

}
上記のようにやると全角コードも判定してしまう。
投稿日時 - 2001-12-18 18:53:43


  • 回答No.2

 了解しました。  えとですね。シフトJISであれば、正規表現を工夫するのが高速でいいんですが、確実をきすならば for を使うべきでしょう。場合によって処理しわけてください。  で、漢字コードの判別は、2バイトコードのヘッダが決まっているので、0x81~0x9F または 0xE0~0xEF であれば、続く1バイトと合わせて2バイトが漢字であると分かります。  詳しくは参考URLを見てみてくださ ...続きを読む
 了解しました。
 えとですね。シフトJISであれば、正規表現を工夫するのが高速でいいんですが、確実をきすならば for を使うべきでしょう。場合によって処理しわけてください。

 で、漢字コードの判別は、2バイトコードのヘッダが決まっているので、0x81~0x9F または 0xE0~0xEF であれば、続く1バイトと合わせて2バイトが漢字であると分かります。
 詳しくは参考URLを見てみてください。
  • 回答No.3
レベル12

ベストアンサー率 75% (398/526)

文字コードの変換には jcode.pl をお使いですか? 半角カナが化けるというのは、半角カナを、そのまま jcode::convert にかけるからです。 フォームの中に、ダミーで良いので、確実に jcode が sjis か euc かを判別できる全角文字を入れておき、それの文字コードを使って jcode を通すようにします。(多分、普通の全角文字は、大抵は正確にコード判定できると思います。) ...続きを読む
文字コードの変換には jcode.pl をお使いですか?
半角カナが化けるというのは、半角カナを、そのまま jcode::convert にかけるからです。
フォームの中に、ダミーで良いので、確実に jcode が sjis か euc かを判別できる全角文字を入れておき、それの文字コードを使って jcode を通すようにします。(多分、普通の全角文字は、大抵は正確にコード判定できると思います。)

例えば、HTMLのFORM内に、次の行を入れておきます。
  <INPUT type="hidden" name="samplecode" value="あ">

で、デコードルーチンを、次のようにしておきます。
  foreach (@pairs) {
    my ($key,$val) = split(/=/,$_);
    $val =~ tr/+/ /;
    $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
    # この位置で jcode にかけると、半角カナが化ける
    $FORM{$key} = $val;
  }
  # 「あ」の文字コードを調べ、全パラメータを変換
  $icode = &jcode::getcode(\$FORM{samplecode});
  foreach (keys %FORM) {
    &jcode::convert(\$FORM{$_}, 'sjis', $icode);
  }

こうすることで、シフトJISで半角カナを使っても、文字化けしません。

# jcode::getcode によって、$icode には「euc」や「sjis」が入るので、それを jcode::convert の第3引数にします。
# この第3引数は、元の文字コードを明示指定するもので、省略すると jcode が getcode を使って自動判別します。
  • 回答No.4
レベル7

ベストアンサー率 30% (6/20)

日本語文字コードをPerlで扱う際には、以下の参考URLが非常に役に立つでしょう。 「日本語を扱う」の「全角文字が含まれているか判定する」に、お探しの半角(SBCS)かなの判定方法が記載されています。 私も過去に仕事で随分と助けられました。 この他に「改行コード」関連も参考になりますよ。 ...続きを読む
日本語文字コードをPerlで扱う際には、以下の参考URLが非常に役に立つでしょう。
「日本語を扱う」の「全角文字が含まれているか判定する」に、お探しの半角(SBCS)かなの判定方法が記載されています。

私も過去に仕事で随分と助けられました。
この他に「改行コード」関連も参考になりますよ。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

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

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

特集


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

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ