半角カタカナ文字化け回避方法

このQ&Aのポイント
  • WEB上でのキャンペーン応募フォームにおいて、半角カタカナの文字化けを避ける方法を教えてください。
  • 半角カナを入力しないように指示しても、ユーザーが半角カナを入力することを避けられません。データの保存にはCSVファイルを使用していますが、正しいデータの取得ができません。
  • Perlを使用していて、半角カナが入力されていない場合は変換できるモジュールを見つけましたが、フリガナの文字化けは避けられません。入力時に半角カナを排除する方法や、Perlでの変換方法を知っている方がいらっしゃれば、教えていただきたいです。
回答を見る
  • ベストアンサー

半角カタカナの文字化けを避ける方法を教えてください

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

  • mieko
  • お礼率15% (3/19)

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

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.3

送信された文字コードが何であるかは、半角カナ以外の文字で調べる必要があります。 まず送信フォーム内に   <INPUT type="hidden" name="dummy" value="あ"> のようにして、全角文字を送信するよう仕込んでおきます。 受け取り側CGIでは、全パラメータを分解・格納した後、キーdummyに入っていた文字をjcode::getcodeに掛け、「あ」の文字コードを得ます。 これをjcode::convertの第3引数にして変換すれば、半角カナも正しく取得できるはずです。 (つまり元コードを指定することで、別のコードとして変換されるのを防ぐわけです。) Sample ------ # よくあるパラメータ分解・格納部分 if ($ENV{'REQUEST_METHOD'} =~ /POST/i) {   read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); } else {   $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach (@pairs) {   my ($key,$val) = split(/=/,$_);   $val =~ tr/+/ /;   $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;   $FORM{$key} = $val; } # 「あ」の文字コードを調べ、全パラメータを変換 $icode = &jcode::getcode(\$FORM{dummy}); foreach (keys %FORM) {   &jcode::convert(\$FORM{$_}, 'sjis', $icode); } ※見易さのため全角SPを入れていますので、コピペする場合は半角SPなどに変換して下さい。

mieko
質問者

お礼

返信遅くなってすみません。 上記のスクリプトを入れるためには、根本的にプログラムを作り直さなければならないので、テストができませんでした。 多分、この方法で解決できると思います。 しかし、iMODEにも対応しているため、ファイルが2kまでとなっているのでフォーム内へのしかけができないんです。 PCからの入力では半角カタカナはほとんどなかったのですが、iMODEからの入力を回避できなくて結局毎日ファイルを手直ししました。 次回試してみます。 ありがとうございました。

その他の回答 (3)

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.4

> しかし、iMODEにも対応しているため、ファイルが2kまでとなっているのでフォーム内へのしかけができないんです。 仕掛けに使う「あ」の部分は、シフトJISとして jcode が認識してくれさえすれば、別のものでも構いません。 例えば、送信ボタンを仕掛けとして使えば、サイズはちょっとで済むと思いますよ。 例:  <INPUT type="submit" name="a" value="送信">  のようにして、デコードする時に $FORM{'a'} の値で getcode する。 この方法なら、最悪ダブルクォートを抜いたとして、HTMLは7バイトの増加で済みます。 また、$ENV{'HTTP_USER_AGENT'} を見て、iモードからの送信ならばsjisと決め打ちして変換する、なんてのも有効ですよ。 (iモードからは、必ずシフトJISで送信されてくるので。)

  • hamatyu
  • ベストアンサー率62% (18/29)
回答No.2

csvの区切り文字をタブから,(カンマ)に変えてみてはどうでしょうか?? UNIXマシンだとタブを判別できないと思うので

mieko
質問者

お礼

住所やテキスト入力があるためタブ区切りを使用しています。カンマなどの記号は入力されることがあるので・・・ すみません ありがとうございました。

  • oodaiko
  • ベストアンサー率67% (126/186)
回答No.1

日本語文字コード変換パッケージとして有名なjcode.pl には半角カナを全角カナに変換する関数があります。 試してみてはいかがでしょうか。下のURLに詳しい解説があります。

参考URL:
http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
mieko
質問者

お礼

ありがとうございます。 jcode.plは試したのですが、どうしても1文字目の文字化けが避けられないのです。 csvはタブ区切りにしています。

関連するQ&A

  • eval 半角カナが文字化けする

    初めて投稿させていただきます。 半角カナが混ざっている文字列をevalすると、文字化けする場合があります。 どうすれば文字化けしないようになりますか? ちなみに全ての半角カナを全角カナに置換してevalを行いその後、半角カナに戻すということをやったのですが、もともと全角カナ文字まで半角カナに変換されてしまいました。できれば全角カナは全角カナ、半角カナは半角カナのまま文字化けせずにevalする方法を教えてください。

    • 締切済み
    • PHP
  • “半角カタカナ”は、ずいぶん昔から使われている1バイト文字なのに、なぜ文字化けするのか?

    よく、「HPやメールなどでは、半角カナは使わない方がいい。」と言いますが、 これはなぜでしょうか? 半角カナは、見にくいくらいで、 文字自体は、普通の英数字の1バイト文字と、変わらないと思います。 普通の半角(1バイトの)英数字は文字化けせずに表示できて、 なぜ半角カナだけ、同じ1バイト文字であるに関わらず、文字化けしてしまうと言われているんでしょうか? (そもそも、本当に半角カナを使用すると、文字化けする例があるのかすら、謎です。) パソコンをよくご存じの方、またはわかる方、教えてください!

  • 半角カタカナと・と漢字が混在する文字化け

    携帯からVCF形式でPCにアドレス帳データを送ったところ、名前の部分が半角カナと・と漢字の混在する文字化け状態になっていました。 どうにか修正したいのですが方法が一切わかりません。よろしくお願いします。

  • 半角カナ文字と特殊文字の変換

    半角カナ文字と「丸で囲まれた1」や「はしご高」等の特殊文字を SJISからJISへ、JISからSJISへ変換する方法を調べています。 半角カナはJISにないという記述も見たのですが、 サクラエディタで双方へ変換できるのと、 Outlookへ半角カナで送信したところ文字化けせず(全角になっていましたが) 受信できたこと、「はしご高」は受送信で文字変換されているようなので、 何か方法があるのではないかと調べています。 方法や参考資料を教えていただければと思います。 よろしくお願いいたします。

  • SendMailのsubject文字化け

    はじめまして。 sendmailについて質問します。 sendmailのsubjectのところで、Perlの中で直接、題目を入れたものは、S-JIS変換すれば、文字化けしないのですが、CSVからデータを持ってきたものは、いくら漢字変換しても、文字化けしてしまいます。 CSVからデータを持ってきたとき、何か別の処理をする 必要があるのでしょうか?教えてください。

    • 締切済み
    • CGI
  • EXCEL(csv)で全角カナを半角カナに一括変換できないでしょうか

    ある年賀状ソフトに入力してあるデータを 別の顧客管理ソフトにCSVでインポートとしようとしております。 しかし年賀状ソフト側は氏名のふりがなが全角カナで入っており (氏名を入力するとそのままふりがな欄に入力される) 顧客管理側はふりがなが半角カナ管理のためインポートでエラーになってしまいます。 EXCEL(csv)にて全角カナを半角カナに一括変換するような方法をどなたかご存じないでしょうか。 お知恵を拝借できれば助かります。

  • 半角カナが文字化けしない

    受信しているメールに半角カナが多用されているんですが一度も文字化けしたことがないんですがどうしてでしょうか 使用のメーラ OUTLOOK2003 以前使用していたメーラ OUTLOOK2000 もちろん自分が送るときは半角カナを使用しないようにしています。

  • 半角カタカナの由来、必要性は?

    半角カタカナって有りますよね。ネットでは文字化けが多いため継子扱いの感もありますが、ワープロの入力文字としては健在です。そもそも全角カナと半角カナ2通りの入力法が存在する歴史や必要性はどういうものでしょう。あと、なぜ半角ひらがなは存在しないのでしょう? 活版印刷ではあまり見たことが無い気がするんですが、半角カナがどうしてもなくては困る、という場合ってあるんでしょうか。なくなっても余り困る人がいない気もするのですが・・・。

  • 文字化けで困っています。

    PHP のプログラムで CSV の読み込みを行うプログラムを組んだのですが、 文字化けするケースがあり困っています。 どういうケースで文字化けするのかもよくわからないのです。 CSV 読み込みプログラムは、次のサイトのものを利用させていただいています。 http://d.hatena.ne.jp/deeeki/20110410/excel_csv_php 文字化けする文字は、全角大文字で。 「INSURANCE BLDG. VI(6)」 で、 文字化け後の文字は、 「��NSURANCE BLDG. VI(6)」 です。 Excel で作成した CSV データを UTF-8 の PHP アプリでデータベースに 登録しようとしています。 Shift_JIS から UTF-8 の文字コード変換です。 わかる方、書き込みお願いします。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでCSV出力時の文字化け(一部)

    PHPのfputsを使用してOracleから抽出したデータを CSVに書き出しているのですがなぜか一部のカナと漢字が 文字化けしていました。 全ての日本語が文字化けしているのでしたら文字コードの 変換が間違っていると思うのですが一部だけ(普通のカナと漢字) なので原因がわかりませんでした。 どなたかお助け下さい。 ・環境 PHP5 Oracle10g

    • ベストアンサー
    • PHP