プロが教えるわが家の防犯対策術!

CGIがまったく分からない者ですが、会社からホームページ管理を任されてしまいました。INPUT NAMEを日本語にすると文字化けになり、困っております。ご存知の方、どうか中のソースをどう編集したら良いのか細かく頂けたら本当に助かります。
以下、CGIのソースです。


#本文タイトル
$honbun_title = '■□ 申込 ■□';

#time
#($sec, $min, $hour, $mday, $mon, $year, $wdy, $yday, $isdst) = Localtime(time);

$clength = $ENV{'CONTENT_LENGTH'};

if($clength ne '')
{
read(STDIN, $query_string, $clength);
@elements = split(/&/,$query_string);
$i = 0;
foreach $element (@elements)
{
(@name[$i], $buf) = split(/=/, $element);
$buf =~ tr/+/ /;
$buf =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode'convert(*buf, 'jis');
@value[$i] = $buf;
$i++;
}

&jcode'convert(*honbun_title, 'jis');
&jcode'convert(*ftitle, 'jis');
open (MAIL, "|$sendmail $trans");
print MAIL "From: $smail ($sname)\n";
print MAIL "Subject: $ftitle\n";
# print MAIL "$year\n\n"
print MAIL "$honbun_title\n\n";
for($j = 0; $j < $i; $j++)
{
print MAIL "■@name[$j] : ";
print MAIL ": @value[$j]\n\n";
}
close(MAIL);

print "Location: $query_file\n\n";
}

A 回答 (2件)

(@name[$i], $buf) = split(/=/, $element);


$buf =~ tr/+/ /;
$buf =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode'convert(*buf, 'jis');
@value[$i] = $buf;
$i++;

ここを

($key , $buf) = split(/=/, $element);
$buf =~ tr/+/ /;
$buf =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode'convert(*buf, 'jis');
$key =~ tr/+/ /;
$key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode'convert(*key, 'jis');
$value[$i] = $buf;
$name[$i] = $key;
$i++;

こんなかんじ?
    • good
    • 0

NAMEに日本語を使う場合は、値の方にURIデコードを掛けるのと同様に、NAME側にもURIデコードを掛けないといけません。


というか、できればNAME側は全角文字を使わず、半角英数字のみの方が良いです。

あと、メールフォームのようですが、メールのサブジェクト(件名)はJISにした後、BASE64エンコードしないといけません。
(メールソフトで文字化けする可能性があります)
また、Content-Typeも吐かせたほうが良いです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!