• 締切済み

半角カナ入力について

perlを使って入力項目を作っている人間です。 ある事に苦戦しています。 半角カナを入力すると文字化けが出てしまうので半角カナを入力しないように注意を促しているのですが、どうしても半角カナを入れてしまう人が入るので、半角カナを入力した時点で、注意事項をCGIで処理したいと思います。 しかし、CGIで処理する場合はどのようにすればいいのか解りません。 何かヒントなどを教えて頂けないでしょうか ? 又参考になるURLなどがありましたら教えて下さい。 お願します。

  • aeic
  • お礼率10% (60/582)
  • Perl
  • 回答数4
  • ありがとう数3

みんなの回答

  • nuki
  • ベストアンサー率30% (6/20)
回答No.4

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

参考URL:
http://www.din.or.jp/~ohzaki/perl.htm
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.3

文字コードの変換には 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 を使って自動判別します。

参考URL:
http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
noname#25358
noname#25358
回答No.2

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

参考URL:
http://www.hosibune.net/~mak/technical/kanji.shtml
noname#25358
noname#25358
回答No.1

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

参考URL:
http://hp.vector.co.jp/authors/VA008536/data/ascii.html
aeic
質問者

補足

補足です。 $dat ← 全角と半角が混じった文字列データ # 半角が含まれているかどうかチェックします。 if ( $dat =~ /[\xA1-\xDF]*/ ) { ここで、半角カタカナが含まれているという メッセージを出して処理を停止する。 } 上記のようにやると全角コードも判定してしまう。

関連するQ&A

  • 半角カナに悩まされております・・・。

    こんばんは! 度々質問させて頂いておりますイインンフォフォと申します。 さて早速質問に移ります。 DBより半角カナの抽出は出来たのですが更新をした場合に文字化けになります。 ピーナッツと言う半角カナのカテゴリがありそこにある情報を取得→更新と言う形です。 全角にしたらいいと言うご意見もあるかと思います。 全角にすると別なプログラムも狂ってしまうので半角でしかダメみたいです。 ピーナッツを抽出→表示 はOKです。 でも内容を更新すると→[ピーナッツ]が文字化けです。 フォームのプルダウンメニューから cate='$pr[4]' と言う形でインサート及び更新をしています。 抽出の時点では半角カナで表示されていて更新作業をすると化けてしまいます。 文字化けした場合、管理画面からカテゴリの訂正をしなければなりません。 DB→EUC-JP PHPファイル→SJIS となっております。 なぜでしょうか!! ご教授願います(*^-^*)

    • ベストアンサー
    • PHP
  • 半角カナから全角カナへ

    お世話になります。 今、フォームから入力された半角カナを全角カナへ変換しようとしているのですが、どうしてもうまく行きません。 処理は以下のようにしています。 jcode::convert(\$str, 'euc'); if($str =~ /[\xA1-\xDF]/){ jcode::h2z_euc(\$str); } (1)まず、半角カナが含まれているかのチェックで[\xA1-\xDF]を使用していますが色々調べたところ、実際は (?:\x8E[\xA6-\xDF]) が正しいようなのですが、この場合文字数が少ないとひっかかってくれません。例えば半角のア1文字や2文字など。また、文字数が多くても半角英数と半角カナが混在しているとひっかからない場合もあります。 上記の式だとひっかかってくれますが、この判定で構わないのでしょうか。 (2)上記の式できちんと置換されるものとされないで漢字のように文字化けするものと出てきてしまいます。 例えば「インターフェース」などという半角は全滅です。 「バージョン」などは大丈夫でした。 間違いなど教えて頂ければと思います。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • OEで件名に半角英数字入力でカナ入力になる

    OEの件名の所に半角英数字を入力しようとするとナゼかカナ入力になってしまいます。 なので、「e」を押すと「い」と入力されます。 不思議なことにメール本文やOKwebではきちんと半角英数字を入力できます。 あと、HP見ていても「6」が「お」と文字化けしていたりします。 どうすれば正常に戻るか教えてください。

  • 半角カナを全角カナに変換する方法?

    言語:Perl5 環境:Unix 半角カナで入力された場合に全角カナへ変換する方法を教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 列ごとに全角英数・全角カナ・半角カナしか入力できないフォーマットをつくりたい

    エクセルで基本フォーマットを作り、他の人に配布&入力してもらった後、全てを集計&データベース化する必要があるのですが。 各列に設けた項目により、‘全角英数のみ’‘全角カナのみ’‘半角カナのみ’の入力規則を設けた後、ロックをかけてみたのですが、変換できてしまう…? 全角英数&カナに関しては【=LEN()*2=LENB()】で逃げれたように思うのですが、‘半角カナのみ’の入力設定がわかりません…;; ちなみに、別の列に入力したものを数式で半角に変換する方法は、今回のフォーマットには使いたくないのですが…?? どなたか、お助けください…**

  • Jcode.pmでの半角カナ→全角カナ変換

    Webフォームから取得したデータに半角カナが含まれていた場合の文字化け対策として、Jcode.pmを使用して、下記のようにEUCに変換しています。 use Jcode; $euc_string = jcode($form_input)->h2z->euc; 原理的には間違ってはいない筈ですが、ほとんどの場合、$form_inputの文字コードの判別に失敗(恐らく半角カナをEUCと誤認)し、文字化けしてしまいます。誤認しないように、下記の様に記述すれば、正しく全角カナに変換してくれます。 use Jcode; $euc_string = jcode($form_input,"sjis")->h2z->euc; ただ、入力コードがシフトJISとは限りませんので、この記述は好ましくないと思っています。 半角カナの文字化けは、webフォームを作られた方なら皆さん経験されていると思うのですが、どうされているのでしょうか? Jcode.pmの文字コード判別は、半角カナが混じっていた場合、かなり長い文字列でないと判別に失敗するようなので、フォームで短い文字列(名前等)を入力させて処理させた場合、ほとんど上手く動かないようなのですが?

    • ベストアンサー
    • Perl
  • 半角カタカナの文字化けを避ける方法を教えてください

    WEB上でキャンペーン応募フォームを作ったのですが、半角カナを入れないでくださいとのコメントを入れても、半角カナを打つ人がいるのは避けられません。 CSVファイルにてデータを保存しなければならないのですが、正しいデータが取れません。 登録件数が多いので(数万件になります)手直しも困難な状態です。 言語はPerlを使っています。 1文字目に半角カナがなければ、変換できるモジュールは見つけたのですが、それだとフリガナの文字化けが避けられないのです。 入力時に半角カナをはじく方法、もしくはperlにて変換する方法をご存じの方がいらっしゃいましたら、教えていただけますでしょうか。 よろしくおねがいします。

  • 全角カナ/半角カナを区別しない検索の方法

    過去ログの中から任意の文字列を検索できる機能のついたPerl4&5のCGIで、例えば『2000』と入力して検索した場合は「2000」も「2000」もヒットし、逆に『2000』と入力して検索した場合も「2000」も「2000」もヒットするように組まれたものが手元にあります。 このCGIでは現在、『ジャンプ』などと半角カタカナでキーワードを入れると「ジャンプ」と全角で記録された記事はヒットしてくれないので、これを改造して、カタカナでも全角/半角を区別せず検索出来るようにしようとしています。 このCGIでは、「2000」も「2000」もヒットするようにする為に '2','(?:2|二|弐|2)','二','(?:2|二|弐|2)','弐','(?:2|二|弐|2)','2','(?:2|二|弐|2)', というような設定を記述して対応しているようなので、カタカナで同じような事をするには 'ン','(?:ン|ン)','ン','(?:ン|ン)',   半角↑  ↑半角 のような記述も加えてやれば実現するだろうと思い、やってみたのですが、その結果、たとえば全角で『ワン』と検索しても半角の「ワン」どころか全角の「ワン」もヒットしなくなってしまいました。 私は基本的にはCGIの知識は殆ど無いので、例えばこちらのサイトで質問を検索して見つかった http://www.okweb.ne.jp/kotaeru.php3?q=56136 などを拝見しても、何をどうしていいのかがさっぱり解りません。 'ン','(?:ン|ン)','ン','(?:ン|ン)', を書き換えて何とか対応することは出来ませんでしょうか? 仮にログの方を全て全角や半角に統一しても、サイトに来られる方が「半角カタカナではヒットしません」という注意に気づかずに検索したら結局検索漏れになってしまうので、何とか実現したいのです。 お解りの方がいらっしゃいましたら、どうかご伝授をお願い致します。

    • 締切済み
    • CGI
  • 入力フォームで入力出来る文字を半角英数に制限する

    いつもお世話になっています 問合せフォームを作成しているのですが、自分で携帯でアクセスしてみた時に、 電話番号など、数字しか入力する必要の無いフォームにフォーカスするとき、 いちいち半角英数を選び直さなければならないのが不便に感じます。 入力フォームにフォーカスすると、自動的に半角英数に入力文字が 切り替わるようなサイトに入ったことがある気がするのですが、 Perlを使ったCGIで設定することは出来るでしょうか? 携帯向けを考えているので、Javascriptでは設定出来ません。 作成している入力フォームはPerlで書かれている、KENTWEBの送信フォームCGIスクリプトです。 宜しくお願いいたします。

    • ベストアンサー
    • CGI
  • MOS検定 カナ入力でもOK?

    MOS検定エクセル2003スペシャリストについて。 私はローマ字入力ではなく、カナ入力なのですが、試験は カナ入力でもOKですか? 試験場のパソコンはローマ字入力するように設定してあると思うのですが、試験が始まる前に自分でプロパティの変更とか出来るのでしょうか? それと、英数字は半角入力するよう言われたのですが これって半角にしたまま大文字入力するってことですか? 全角でIFじゃなくて半角でIFと入力しないとダメなのですか? 独学でやってるので、そのへんのお約束ごとがよくわかりません。 その他、なにか注意点があれば教えて下さい。 よろしくお願いします。

専門家に質問してみよう