- 締切済み
INPUT NAMEの文字化け
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"; }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Betamo
- ベストアンサー率41% (5/12)
私が使っている方法です。参考にどうぞ #デコード if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); $FORM{$name} .= $value; } foreach(keys %FORM){ $data .= "\n".'■'.$_."\n".$FORM{$_}; } これで$dataにフォームから送られてきた全てのデータが挿入されます。 あと、文字化けの原因がもう一つあって、HTMLの文字コードが正しく設定されていないときにも発生します 例えば、自分のパソコン内で作成したときはShift_JS形式だったため、メタタグでShift_JSを指定していたのに、アップロードすると自動的にEUC等に変換されて、そのフォームからデータが送られると、推測ですが、jcode.plに、その文字コードはEUCにもかかわらずShift_JSだと判断して間違った処理を行うのから(ではないかと思います)
お礼
ご丁寧な回答有難うございました。 ただ、ソースのつなぎ方が分からなくて うまく使うことができませんでした。 大変申し訳ございませんが、もし、 お分かりでしたらアドバイスをお願い申し上げます。