perlでフォームから送信する際にまず、htmlから記入してCGIを呼び出し確認画面を出します。
その次に送信となるのですが記入フィールドに空白があると空白から先が削除されて送信されてしまいます。
例えば
山田 太郎と送信しようとすると空白の後が削除され山田で送信されます。
これはどう対処すればいいでしょうか?
$hoge =~ s/ /hoge/g;な形でエンコードすればいいのでしょうか?
お教えください。

A 回答 (3件)

パソコンのホームページからやってみてもi-modeのホームページからやってみてもCGIでの取り出しには問題でませんね~。

(^_^;(共に自作)
後はReadParseの辺りでしょうか。
お手数ですが今度はReadParse以降、取り出した値の変数への格納のあたりを記載して頂けますか?
尚、先程のソースの中で実際に「山田(実際には山田 太郎)」が入る部分はどこでしょう。
併せて補足お願いします。
    • good
    • 0

すみません、ちょっと時間が押しているので詳しくは後ほど・・・。

(^_^;
とりあえず下記は大丈夫でしょうか?

print <<EOF  → print <<EOF;

御確認下さい。

この回答への補足

ごめんなさい下記は記述ミスでした。^^
EOFの部分は問題ありません。

補足日時:2001/09/08 13:05
    • good
    • 0

CGI側の入力値取り出し処理周りを見ないと何とも言えません。


通常なら空白で途切れたりしないと思いますが・・・。
まずは一部で結構ですので該当するソースを補足欄に載せて下さい。
それと使用しているのはPOSTですか、GETですか?
宜しくお願いします。

この回答への補足

まず、methodはpostです。
処理としましては、
<input type=hidden name=hoge value=abc>で次の処理に渡します。
ここで

$message =
print <<EOF
名前
$hoge
内容
$etc・・
EOF

と、送信内容を$meaageに入れ、下記処理にと続きます。
&jcode'convert(*message,'jis');
open(MAIL, "|$sendmail -t") || &error("失敗");
print MAIL "To: $a\n";
print MAIL "From: $b\n";
print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n";
print MAIL "Content-Transfer-Encoding: 7bit\n";
print MAIL "Subject: abc\n";
print MAIL "$message\n";
close(MAIL)
いかがでしょう?

補足日時:2001/09/08 12:40
    • good
    • 0

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

このQ&Aと関連する良く見られている質問

Q${str}と$strの違いとは?

スカラー変数の${str}と$strの違いとは何なのでしょうか。

スカラー変数における{}の意味がよくわかりません。
別になくても処理は変わらない気がしますが、
どういった際に{}は使用するのでしょうか?

Aベストアンサー

もしPerlでのことでしたら、スカラー変数名を{}で囲むのは、それ以降に半角文字が続く場合に、そのスカラー変数名と半角文字の文字列との境界を明示するためだと思います。 変数自体に何かの違いがあるということではないはずです。

たとえば、処理の中でスカラー変数$strに続けてstrという文字を書き出したい場合、「$strstr」と記述すると、[$str]とは別の[$strstr]という名前のスカラー変数と認識されてしまいます。 これを避けるために、スカラー変数名を{}で囲って、「${str}str」と記述することで、$strというスカラー変数に、strという文字が続いていると認識させる、という具合だと思います。

見当違いでしたらごめんなさい。

QCGIで表示されるページ(hoge.cgi)に

CGIで表示されるページ(hoge.cgi)に
<meta http-equiv="Refresh" content="5;URL=www.abc.com">
とメタタグを記述し、5秒後に指定URL(abc.com)に飛ぶようにしているのですが、
この方法ですとジャンプ先(abc.com)ではリンク元(hoge.cgi)が特定できません。
ジャンプ先でリンク元URLを特定できるようにしたいのですが、何か方法はありませんでしょうか?

Aベストアンサー

 refreshの場合は、それを受け取ったブラウザは、HTTP要求ヘッダ内にrefererを含めません。含んではならない。refererは能動的に参照するという意味があるからですね。したがってサーバーの環境変数HTTP_REFERERには値が入ってこない。
 したがって他の手段を用いる必要があります。良く使われる方法は
・Cookie 
 いわゆるtracking Cookieですが、この場合セキュリティソフトで消される場合がある。
・Web ビーコン
 ジャンプ先のサーバーで画像を出力させる。セキュリティを高レベルにしていると、表示しているページのドメインと異なる場所の画像は読み込まない場合もある。
 手法については
   下記の様に、単一の画像ファイル「a.jpg」を呼び出して、 - CGI - 教えて!goo
    ( http://oshiete.goo.ne.jp/qa/5901567.html )
・PATH_INFOやQUERY_STRINGSなどに含めて、refere先のサーバーで処理する。

 私は、この3つを併用しています。最後の方法については、
・DirectoryIndexで、index.cgiを表示させるようにするか、index.htmlをCGIとして動作させる、あるいはindex.phpを使い、
 <meta http-equiv="Refresh" content="5;URL=www.abc.com/hoge.com/">
 <meta http-equiv="Refresh" content="5;URL=www.abc.com?hoge.com">
のようにする。

 処理後直ちにページを閉じた場合なども含めて確実に補足するには、3つを併用するとよい。

 refreshの場合は、それを受け取ったブラウザは、HTTP要求ヘッダ内にrefererを含めません。含んではならない。refererは能動的に参照するという意味があるからですね。したがってサーバーの環境変数HTTP_REFERERには値が入ってこない。
 したがって他の手段を用いる必要があります。良く使われる方法は
・Cookie 
 いわゆるtracking Cookieですが、この場合セキュリティソフトで消される場合がある。
・Web ビーコン
 ジャンプ先のサーバーで画像を出力させる。セキュリティを高レベルにしていると、表示して...続きを読む

Q$a++と++$aの違いがよくわかりません。

わかりやすい、いい例ってありますか?

Aベストアンサー

PHPだけど、(Perl)はここ数年さわっていないけど同じかな。
$a = 10;
++$a;
print($a); ← aは11
じつはこの場合は、$a++;でも同じ。

$b = 10;
$c = $b++;
print($b, $c);

$b は11,$cは10。$cが++$bなら11。
さてなんででしょう?

$c = $b++;

1.$cに$bを代入する。なので、$bと同じ値が入る。
2.その後,$bに++(1)を足す。

$c = ++$b
だと、
1.$bに++(1)を足す。のが最初。
2.その後,$cに$bを代入する。

式が評価される順番が少し違うだけ。
間違ってないと思うけど、いろいろ実験してみて。

Q/usr/local/bin/perl の発音

あまりにも初歩の質問かもしれませんが、
/usr/local/bin/perl
・・・を、声に出すとすると、
/ユーザー/ローカル/ビン/パール
・・・で、良いのでしょうか?

Aベストアンサー

新版 UNIX 由来/読み方辞書
http://x68000.q-e-d.net/~68user/unix/unix-term-dic.html

QUTF8 エンコード/デコード

http://oshiete.goo.ne.jp/qa/6746313.html


で質問した者です。
どうもお答え頂いたエンコードと、ブラウザ様が勝手に行うエンコードのルールが違うようです。

Perlは全てutf8、出力するHTMLもutf8、ブラウザ様が勝手にエンコードしたデータはなんですかあれ?

いろいろ試しましたが、なにをどうやっても文字化けします。

Aベストアンサー

昔作った検証用サンプルも入れときます
参考になれば幸いです

[ファイル名:index.cgi:UTF-8]↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
#!/usr/bin/perl

my $sDT = '漢字です';
my $sDT_URL = './test.cgi?T1='.URL_Encode($sDT);

print <<HTML_BODY;
Content-type: text/html\n\n
<html>
<head>
<meta http-equiv="Content-Language" content="ja">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>TEST UTF-8</title>
</head>
<body>
<p><a href="$sDT_URL">CLICK</a></p>
</body>
</html>
HTML_BODY

exit;

## URLエンコード
sub URL_Encode{
my ($p01,@waste)=@_;
$p01 =~ s/([^\w])/'%'.unpack('H2',$1)/eg;
$p01 =~ tr/ /+/;
return $p01;
}
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑


[ファイル名:test.cgi:UTF-8]↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
#!/usr/bin/perl

my %hIN = readMethod();
my $ss = $hIN{T1};

print "Content-type: text/html\n\n";
print <<HTML_BODY;
<html>
<head>
<meta http-equiv="Content-Language" content="ja">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>TEST UTF-8</title>
</head>
<body>
送信内容:$ss
</body>
</html>
HTML_BODY

exit;

## ********************************************************
## メソッド読み込み
## ********************************************************
sub readMethod{
my %rm_in;
my $paramPost;
if($ENV{REQUEST_METHOD} eq 'GET'){
my @tmpPrmt = split(/&/,$ENV{'QUERY_STRING'});
foreach(@tmpPrmt){
my ($p1,$v1) = split(/=/,$_);
$v1 =~ tr/+/ /;
$v1 =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ego;
if(exists($rm_in{$p1})){
$rm_in{$p1} .= "\t".$v1;
}else{
$rm_in{$p1}=$v1;
}
}
}elsif($ENV{REQUEST_METHOD} eq 'POST'){
read(STDIN, $paramPost, $ENV{'CONTENT_LENGTH'});
my @tmpData=split(/&/,$paramPost);
foreach(@tmpData){
my ($p1,$p2)=split(/=/,$_);
$p1 =~ tr/+/ /;
$p1 =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ego;
$p2 =~ tr/+/ /;
$p2 =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ego;
if(exists($rm_in{$p1})){
$rm_in{$p1} .= "\t".$p2;
}else{
$rm_in{$p1}=$p2;
}
}
}else{
print "die for error...";
}
return %rm_in;
}
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

昔作った検証用サンプルも入れときます
参考になれば幸いです

[ファイル名:index.cgi:UTF-8]↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
#!/usr/bin/perl

my $sDT = '漢字です';
my $sDT_URL = './test.cgi?T1='.URL_Encode($sDT);

print <<HTML_BODY;
Content-type: text/html\n\n
<html>
<head>
<meta http-equiv="Content-Language" content="ja">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>TEST UTF-8</title>
</head>
<body>
<p><a href="$sDT_URL">CLICK</a></p>
</body>
</html>
HTML_B...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報