dポイントプレゼントキャンペーン実施中!

前のページで入力された値を取得するCGIですが、どうしても半角スペースを認識しません。
それどころか、半角スペースの後ろを一切消してデータを取得しています。
同じように作成したものはきちんと動いているのに…。

どこが間違ってるかご指摘お願いします。


----------
#!/usr/local/bin/perl

read(STDIN,$buffer,$ENV{'content_length'});

@atai = split(/&/,$buffer);
foreach $atais(@atai){
($key, $value) = split(/=/, $atais);
$FORM{$key}=$value;
}

$buffer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;


$buffer =~ tr/+/ /;
$value =~ tr/+/ /;
$key =~ tr/+/ /;

print "Content-type:text/html\n\n";
print "$key<BR>\n";
print "<A HREF=./***.cgi>Back</A><BR>\n";

open (FH,">***.log");
@filew="$buffer\n";
print FH @filew;
close(FH);

exit;

----------

以上です。よろしくお願いします。

A 回答 (1件)

どうもwolfwoodです。


Perlの処理自体は正しいです。
ただし、受け渡す元のデータに問題があると思います。
私も経験があるのですが例えば受け渡し元がhiddenの場合

<INPUT type=hidden name=test value=$data >

このように書いても動きますが、valueの値$dataに半角が入ると
$data="test test";

<INPUT type=hidden name=test value=test test >

となるためvalueの値はtestのみになります。
HTMLが正しく認識できるようにクォーテーションで囲んでください。

<INPUT type="hidden" name="test" value="$data" >

安全性を高めるためにクォーテーションを付ける癖をつけて置くと良いでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

""でくくってませんでしたので、""(実際はcgiファイルなので'')でくくった
ところ正常に認識してくれました!ありがとうございました。
まさかこんなところでひっかかってるとは知らずずっとコードとにらめっこしてました。

本当にありがとうございました!!

お礼日時:2002/12/13 11:37

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