下記のようなものを作成しました。
if ($FORM{'WORD'} eq 'フォーム'){
&form;
} elsif($FORM{'WORD'} eq '確認'){
&kakunin;
} elsif($FORM{'WORD'} eq '入力'){
&nyuuryoku;
}
sub kakunin{
print "<FORM METHOD=POST ACTION=top_nyuuryoku1.cgi>\n";
print "<TABLE CLASS=TABLE2 CELLSPACING=0 CELLPADDING=2>\n";
print "<TR><TD WIDTH=80 CLASS=TD1>社員番号</TD><TD CLASS=TD2>$FORM{'BANGOU'}<INPUT TYPE=HIDDEN NAME=BANGOU VALUE=$FORM{'BANGOU'}></TD></TR>\n";
print "<TR><TD WIDTH=80 VALIGN=TOP CLASS=TD1>本文</TD><TD CLASS=TD2>$FORM{'NAKAMI'}</TD><INPUT TYPE=HIDDEN NAME=NAKAMI VALUE=$FORM{'NAKAMI'}></TR>\n";
print "</TABLE>\n";
print "<BR>と入力されました。これでよければボタンを押してください。<BR><BR>\n";
print "<INPUT TYPE=HIDDEN NAME=WORD VALUE=入力>\n";
print " <INPUT TYPE=SUBMIT CLASS=BUTTON VALUE=入力>\n";
print "</FORM>\n";
}
sub nyuuryoku{
print "入力しました。<BR>\n";
print "<A HREF='top.cgi'>戻る</A>\n";
open (FILE,">>top.log");
flock(FILE,2);
@FILES = "$buffer\n";
print FILE @FILES;
flock(FILE,8);
close(FILE);
}
※多少省略あり。
※$bufferはこれの前のページから受け取ったもの。
kakuninのところの$FORM{'NAKAMI'}ではちゃんと半角スペースや改行が認識されていますが、nyuuryokuになるとだめです。
一体何が原因なのでしょうか?
No.2ベストアンサー
- 回答日時:
まず、
><INPUT TYPE=HIDDEN NAME=NAKAMI VALUE=$FORM{'NAKAMI'}><
ですが、ちゃんとダブルクォーテーションで囲んで
<INPUT TYPE=\"HIDDEN\" NAME=\"NAKAMI\" VALUE=\"$FORM{'NAKAMI'}\">
としてください。
どこまでが範囲かわからずに期待通りの動作をしていないようです。
それから、
>$buffer =~ s/\n/<BR>/g;
まとめてやってしまうのは良いですが、これだと入力された内容に改行が入っていた場合、<BR>というタグまで保存されてしまいますよ。
ついでですが、改行の処理は
$buffer =~ s/\r\n/<BR>/g;
$buffer =~ s/\r/<BR>/g;
$buffer =~ s/\n/<BR>/g;
としておいた方が良いと思います。
何も改行は\nだけではありません。
環境によって、\r\n(Windows)だったり\r(Mac)だったりしますから、\nだけでは正常に動作しない場合があります。
この回答への補足
失礼しました。
$buffer =~ s/\n/<BR>/g;
を
$buffer =~ s/\r\n/<BR>/g;
$buffer =~ s/\r/<BR>/g;
$buffer =~ s/\n/<BR>/g;
に変更したところ、改行が倍になってしまうことや半角の「・」の混入はなくなりました。
ありがとうございました。
回答ありがとうございます。
ダブルクォーテーションで囲ったらなんとか無事動き出しました。
でも改行が多くなってしまうのです。
倍になってしまいます。
それと必ず改行を有効にすると出てくるのですが、
半角の・みたいなのが入ってしまいます。
これはなぜでしょうか?
>まとめてやってしまうのは良いですが、これだと入力された内容に改行が入っていた場合、<BR>というタグまで保存されてしまいますよ。
はどういうことですか?
まとめてやってしまうのは…とかかれていますが、私の知識ではこれがいっぱいっぱいなんです(^^;
No.3
- 回答日時:
>>まとめてやってしまうのは良いですが、これだと入力された内容に改行が入っていた場合、<BR>というタグまで保存されてしまいますよ。
>はどういうことですか?
>まとめてやってしまうのは…とかかれていますが、私の知識ではこれがいっぱいっぱいなんです(^^;
$buffer =~ s/\n/<BR>/g;
とすると、送信されたデータを全て改変してしまい、元のデータがなくなってしまいますよね。
もし\nのままのデータが必要になったらどうします?
#例えばKODAMARさんが何かのデータを編集する時も、念のため名前を変えて保存したり、バックアップを取っておいたりしませんか?
foreach(@buffers){
($key,$value)=split(/=/,$_);
$key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$key =~ tr/+/ /;
$key =~ s/\n/<BR>/g;
$FORM{$key} = $value;
}
としておけば、$buffer は全く改変されないまま残ります。
また、現状送信されたデータに改行が含まれていた場合<BR>タグも一緒に保存されてしまいますよね?
保存の形は$buffer のままで良いんだけど、改行はなくしてしまいたいなぁ…と思ったときに、保存する直前に
$buffer =~ s/\r\n//g;
$buffer =~ s/\r//g;
$buffer =~ s/\n//g;
とすれば、良いのでは?と思ったんです。
もちろん今のままで
$buffer =~ s/<BR>//g;
とするのでも問題ありませんよ。
No.1
- 回答日時:
これだけでは何とも言えませんが…確認画面で「入力」ボタンが押された後、フォームから送信されたデータ全てに対して(つまり$buffe
角スペースや改行の処理がされていますか?回答ありがとうございます。
上記のコードの1番上に、
read(STDIN,$buffer,$ENV{'content_length'});
$buffer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$buffer =~ tr/+/ /;
$buffer =~ s/\n/<BR>/g;
@buffers = split(/&/,$buffer);
foreach(@buffers){
($key,$value)=split(/=/,$_);
$FORM{$key} = $value;
}
と入っています。
これではダメなのでしょうか?
kakunin部分では動いているのであっているのだと思ったのですが…。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CGIを勉強しています。¥n(改...
-
Excel VBA メール作成について ...
-
連想するもの教えてください
-
Win、Mac混在環境で、subversio...
-
Rstudioによるテキストマイニン...
-
エクセルシート名の制限を変更...
-
10Mバイトて文字数に すると何...
-
ListView重複データ削除
-
Javaで日本語1文字のバイト数
-
UTF-8で5~6バイトになる文字コ...
-
int型(2バイト)データの分割
-
PICNICのVB制御プログラム
-
VB.NET LeftBの代用
-
【VB2005】テキストボックス内...
-
バイト列とバイナリ列の違いが...
-
VB6でのファイルサイズ取得につ...
-
pythonにCでのexternはありますか
-
char str[256]の256の意味は?
-
memcmp バイナリデータの比較方法
-
stable diffusionのエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBA メール作成について ...
-
Rstudioによるテキストマイニン...
-
CGIを勉強しています。¥n(改...
-
Line Inputにて改行があっても...
-
perlで、[ \\r\\n , \\n ]の意...
-
ホームページビルダーで行間を...
-
テキストボックスに入力された...
-
KENT-WEBのClipMailでのチェッ...
-
メモ帳での改行
-
【HELP!!】Excelから保存したtx...
-
連想するもの教えてください
-
number 改行が追加できない
-
エクセルで「改行コード」を「...
-
改行コードがそのまま表示され...
-
if文中で@***(配列変数)って...
-
大至急!! メモ帳でホームペ...
-
textareaのデータのcgiでの受け...
-
MACの改行コード変更について教...
-
改行コードについて
-
アクセスした日付より前の記事...
おすすめ情報