CGI-BBS > CGI > Perl > 全角入力文字を半角カタカナに変換したい


カレッヂ
カレッヂ


質問者 KTH  投稿日 8/7(木) 18:48:59
毎度お世話になっております。

入力フォームにて、入力された全角文字(主にひらがな)を、半角カタカナにしてCSVファイルに落としたいと
思います。

そのため、最初

$ruby1 =~ tr/あ-ん/ア-ン/;
&jcode::convert(*ruby1,'euc');

$ruby2 =~ tr/あ-ん/ア-ン/;
&jcode::convert(*ruby2,'euc');

print FILE "ruby1, ruby2";

として、入力フォームから”なまえ”と入力したところ、結果は”アネアワアヲ”と文字化けを起こしてしまいました。
そのため、今度は

#&jcode::convert(*ruby1,'sjis');
#&jcode::z2h_sjis(*ruby1);

#&jcode::convert(*ruby2,'sjis');
#&jcode::z2h_sjis(*ruby2);

として、入力フォームから”なまえ”と入力したところ、そのまま”なまえ”となっていました。

これは何が悪いのでしょうか?

申し訳ございませんが、教えていただけないでしょうか?

宜しくお願いします。

プロバイダ参照:
サーバのOS:UNIXサーバ
パソコンのOS:WinNT系
エディタ:TeraPad
FTPソフト:FFFTP
サーバ移転:していない
改造:していない
CGI習熟度:beginner

回答者 しあわせのツボ  [削除]  投稿日 8/7(木) 22:51:14
trは、いわゆる全角文字の変換には使えません。
この関数は1バイトずつの変換を想定したものですが、
「日本語全角文字」は2バイト以上の組み合わせで表現されているためです。

ご希望の機能は、jcode.plに用意されているjcode::trやjcode::z2hなどを
組み合わせれば作れるように思います。
詳しくはjcode.pl内に書かれている使い方を参照してください。
質問者 KTH  [削除]  投稿日 8/8(金) 13:26:19
しあわせのツボさん、早々のご返信ありがとうございます。

いただいたアドバイスを元に考えてみたのですが、やはり上手く行きません。

$file = "sample.csv";

open (FILE, ">> $file");

&jcode'convert(*ruby1,'euc');
&jcode::z2h_euc(*$ruby1);
&jcode::tr(\$ruby1, "あ-ん", "ア-ン");

&jcode'convert(*ruby2,'euc');
&jcode::z2h_euc(*$ruby2);
&jcode::tr(\$ruby2, "あ-ん", "ア-ン");

print FILE "ruby1 ruby2\n";

として、”なまえ なまえ”と入力したところ、CSVファイルには

、ハ、゙、ィ 、ハ、゙、ィ

と入ってしまいます。
&jcode::z2hおよび&jcode::trは、EUC-JPにしなければならないとのことなので変換はしているのですが、
どうも上手くいきません。

再度で大変申し訳ございませんが、アドバイスいただけないでしょうか?

宜しくお願い致します。
質問者 KTH  [削除]  投稿日 8/8(金) 20:05:32
自己レスです。

いろいろ調べた結果、先程書きました、

&jcode'convert(*ruby1,'euc');
&jcode::z2h_euc(*$ruby1);
&jcode::tr(\$ruby1, "あ-ん", "ア-ン");

で実行できなかった部分は、

&jcode::z2h_sjis(*ruby1);
&jcode'tr(*ruby1,'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへもまみむめもやゆよらりるれろわん',
'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン');

とすることで解決できました。
お騒がせしまして失礼しました。

さて、現在さらに新たな問題を抱えております。
それは、全角ひらがな入力以外を禁止したいのですが、これがなかなか上手く行きません。

if(( $ruby1 !~ /{あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへもまみむめもやゆよらりる
れろわん'}/ ) {

print "全角ひらがなで入力されていません。</p>\n";
print "全角ひらがなで正しく入力ください。</p>\n";
exit;

}

として実行させているのですが、全角ひらがなで入力してもエラーメッセージがでてしまいます。

これはどこが悪いのでしょうか?

数回に渡り、大変申し訳ございませんが、教えていただけないでしょうか?

宜しくお願い致します。
回答者 しあわせのツボ  [削除]  投稿日 8/8(金) 22:30:38
その書き方だと、「"{あいうえ(中略)'}"という文字列」を探していることになるので、
普通はマッチしないでしょう。
しかも、もしそれがあれば、他に何か入力されていても無視されます。
/^{あ|い|う|え|(中略)|ん}+$/ が妥当なパターンでしょうか。嫌な書き方ですけど。

あと、お書きのパターンでは濁点・半濁点・拗促音(ゃゅょっ)等が
一切考慮されていないようです。対応しておかないとクレームが来るでしょう。

それと言い忘れてましたが、いわゆる半角カナは
ネット上では使うべきでないとされています。
携帯専用サイトでもない限り、わざわざそれに変換するのは危険です。
質問者 KTH  [削除]  投稿日 8/9(土) 09:39:39
しあわせのツボさん、再度に渡りアドバイスいただきまして、誠にありがとうございます。

いただいたアドバイス通りにしてみた結果、上手く行きました。深く感謝します。

濁点等については、追加させていただきます。こちらについてのご指摘にも感謝します。

半角への変換につきましては、お客さんから「入力フォームで入力したデータをCSVファイルに落とす際、データの一部を半角カナにしたい」
という要求があり、以上のようなコードを組むこととなりました。
サーバーで処理させるためにその方がよいとのことです(こちらも、営業担当者経由で聞いた話なのでよく分かりませんが)。

困っていたので大変助かりました。何度もしつこいようですが、お礼申し上げます。深く深く感謝いたします。
本当にありがとうございました。

今後何かあるかもしれませんが、その際は申し訳ございませんが、また宜しくお願いいたします。

このページは終了したので返信(回答)は書きこめません
 


Web裏技