WEB上でキャンペーン応募フォームを作ったのですが、半角カナを入れないでくださいとのコメントを入れても、半角カナを打つ人がいるのは避けられません。
CSVファイルにてデータを保存しなければならないのですが、正しいデータが取れません。
登録件数が多いので(数万件になります)手直しも困難な状態です。
言語はPerlを使っています。
1文字目に半角カナがなければ、変換できるモジュールは見つけたのですが、それだとフリガナの文字化けが避けられないのです。
入力時に半角カナをはじく方法、もしくはperlにて変換する方法をご存じの方がいらっしゃいましたら、教えていただけますでしょうか。
よろしくおねがいします。
No.1
- 回答日時:
日本語文字コード変換パッケージとして有名なjcode.pl
には半角カナを全角カナに変換する関数があります。
試してみてはいかがでしょうか。下のURLに詳しい解説があります。
参考URL:http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
ありがとうございます。
jcode.plは試したのですが、どうしても1文字目の文字化けが避けられないのです。
csvはタブ区切りにしています。
No.2
- 回答日時:
csvの区切り文字をタブから,(カンマ)に変えてみてはどうでしょうか??
UNIXマシンだとタブを判別できないと思うので
住所やテキスト入力があるためタブ区切りを使用しています。カンマなどの記号は入力されることがあるので・・・
すみません
ありがとうございました。
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などに変換して下さい。
返信遅くなってすみません。
上記のスクリプトを入れるためには、根本的にプログラムを作り直さなければならないので、テストができませんでした。
多分、この方法で解決できると思います。
しかし、iMODEにも対応しているため、ファイルが2kまでとなっているのでフォーム内へのしかけができないんです。
PCからの入力では半角カタカナはほとんどなかったのですが、iMODEからの入力を回避できなくて結局毎日ファイルを手直ししました。
次回試してみます。
ありがとうございました。
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で送信されてくるので。)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- その他(ソフトウェア) ソースネクストアプリをインストールし、製品登録で半角英数字が入力できない 5 2022/07/03 22:44
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) EXCELでの文字・数字入力の基本について教えてください。 2 2023/05/29 23:17
- Word(ワード) Windows11キーボードの調子が悪いので治し方を教えてください。 【症状】 1つ目 キーボードの 5 2022/07/03 14:51
- デスクトップパソコン 40年間の悩み キーボードにおいて初期値として漢字ローマ字変換に設定する方法 8 2023/05/08 14:50
- マウス・キーボード 何故、ローマ字や英語を全角で打つ? 5 2022/05/15 09:36
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Excel(エクセル) セルに入力した小文字アルファベット、数字を大文字表示させるには? 3 2022/07/13 10:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAでPDFファイルをMicro...
-
CString から LPCTSTRの型に変換
-
【PHP】全角記号を半角記号...
-
文字コード(多言語化?)の取り...
-
Delphiの型変換
-
Visual Studio プロパティペー...
-
Pythonについて。
-
VB→Java変換ツールしませんか?
-
ローマ字からカナに変換する方...
-
テキストをhtml変換するには
-
シャープ(#)の受け渡し
-
ファイル名の右側を変更したい ...
-
gccでiconvを使った文字コード...
-
SJIS->UTF8->SJISコード変換に...
-
日付をシリアル値に変換
-
CSVファイルの中で、「 , 」カ...
-
EXCELからCSVにすると余計なカ...
-
Accessのテキストボックスの入...
-
エクセルで数値を全角文字(カ...
-
コマンドプロンプトでのsedの使...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでPDFファイルをMicro...
-
文字コードの%E3%80%とは何です...
-
r18文学賞は文字数ではなく、枚...
-
Pythonについて。
-
CString から LPCTSTRの型に変換
-
Pythonについて。
-
テキストをhtml変換するには
-
SJIS->UTF8->SJISコード変換に...
-
シャープ(#)の受け渡し
-
gccでiconvを使った文字コード...
-
VBScript 全角英数記号→半角英...
-
【PHP】全角記号を半角記号...
-
ローマ字からカナに変換する方...
-
日付をシリアル値に変換
-
VB6にも「ToString」ってあり...
-
Visual Studio プロパティペー...
-
VBScript文字列をSJISからUTF8...
-
改行を含んだ文字列を正規表現...
-
SQLのデータで半角カナを全角に...
-
漢字からカタカナ変換マクロ
おすすめ情報