perl cgi 文字コード変換について
掲示板でログファイルへの書き出しの際に文字コードをshift-jisに変更したいのですが,
#投稿された値を受け取る
if ($ENV{'REQUEST_METHOD'} eq 'POST') {
read(STDIN, $alldata, $ENV{'CONTENT_LENGTH'});
} else {
$alldata = $ENV{'QUERY_STRING'};
}
foreach $data (split(/&/, $alldata)) {
($key, $value) = split(/=/, $data);
$value =~ s/\+/ /g;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1))/eg;
$value =~ s/\t//g;
$in{"$key"} = $value;
}
#ヘッダの表示
print "<html>\n";
print "<head><title>掲示板</title></head>\n";
print "<body>\n";
#受け取ったデータをファイルに書き込む
if ($in{'handle'} ne '' && $in{'message'} ne '') {
if (open(FH, "bbs.txt")) {
@file = <FH>;
close(FH);
use CGI;
$cgi=new CGI;
$name1=$cgi->param('handle');
$name2=$cgi->param('number');
use Encode;
use Encode::Guess qw(euc-jp shiftjis 7bit-jis);
encode("shiftjis",decode('Guess',$name1));
encode("shiftjis",decode('Guess',$name2));
unshift(@file, "$name1\t$name2\n"); ##この部分で
if (open(FH, ">bbs.txt")) {
print FH @file;
close(FH);
} else {
print "<p>ファイルに書き込めません。</p>";
}
} else {
print "<p>ファイルを読み込めません。</p>";
}
}
#投稿フォームの表示
print "<form method=\"post\" action=\"bbs.cgi\">\n";
print "<p>\n";
print "ハンドルネーム<br>\n";
print "<input type=\"text\" name=\"handle\" size=\"20\" value=\"\"><br>\n";
print "メッセージ<br>\n";
print "<input type=\"text\" name=\"message\" size=\"20\" value=\"\">\n";
print "</p>\n";
print "<p><input type=\"submit\" value=\"送信する\"></p>\n";
print "</form>\n";
#記事の一覧表示
if (open(FH, "bbs.txt")) {
while ($data = <FH>) {
($handle, $message) = split(/\t/, $data);
print "<p>\n";
print "投稿者:$handle<br>\n";
print "メッセージ:$message\n";
print "</p>\n";
}
} else {
print "<p>ファイルを読み込めません。</p>";
}
#フッタの表示
print "</body>\n";
print "</html>\n";
exit;
このような感じでかいたのですが文字コードを変更し,unshift(@file, "$name1\t$name2\n");と記述すると何も書かれずに空白になってしまいます..なぜでしょうか?困っています.教えて下さい.
ちなみにunshift(@file, "$in{'handle'}\t$in{'message'}\n"); と文字コードの変更を意識しなかった場合にはちゃんとファイルに書かれています.
jcode.plなどは使わずにencodeで行いたいです.
お礼
数字は使えないんですね;; 大変勉強になりました また、記述していただいた通りでうまく表示できました ありがとうございました m(_ _)m