先に投稿した質問内容に利用規約違反してしまっている部分があったので、修正・追加したものを再度投稿します。
htmlファイル(特に関係無さそうな部分省略)
<form name="form1" method="post" action="送り先CGI">
<input type="password" name="pasu1" size="10">
<input type="password" name="pasu2" size="10">
<input type="password" name="pasu3" size="10">
<input type="submit" name="sabu" value="nn4win">
</form>
CGIファイル(特に関係無さそうな部分省略)
#!/usr/bin/perl
$title = 'フォーム内容表示';
$jcodelib = './jcode.pl';
$kanjicode = 'euc';
require "$jcodelib";
&init_form($kanjicode);
$pasu1 = $form{'pasu1'};
$pasu2 = $form{'pasu2'};
$pasu3 = $form{'pasu3'};
$sabu = $form{'sabu'};
&error;
exit();
sub init_form {
local($query, @assocarray, $assoc, $property, $value, $charcode, $method);
$charcode = $_[0];
$method = $ENV{'REQUEST_METHOD'};
$method =~ tr/A-Z/a-z/;
if ($method eq 'post') {
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
} else {
$query = $ENV{'QUERY_STRING'};
}
@assocarray = split(/&/, $query);
foreach $assoc (@assocarray) {
($property, $value) = split(/=/, $assoc);
$value =~ tr/+/ /;
$value =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("C", hex($1))/eg;
&jcode'convert(*value, $charcode);
$form{$property} = $value;
}
}
sub error {
print <<__END__;
content-type:text/html
<html>
<head>
<title>$title</title>
$contenttype
</head>
<body bgcolor="#FFFFFF" text="#000000">
$pasu1<br>
$pasu2<br>
$pasu3<br>
$sabu<br>
</body>
</html>
__END__
exit();
}
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
私のとこのNSC4.78では以下perlで受けると大丈夫そうに見えますが・・・どうでしょう。
#!/usr/bin/perl
print "Content-Type: text/html; charset=EUC-JP\n\n";
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
print $query;
exit();
回答ありがとうございます。
こちらでもそのPerlで試してみた所、
NAME=pasu1のVALUEは受信していましたが、
NAME=subuの方は未だに末尾が欠けて
VALUE=は「nn4wi」となってしまいます。
SUBMITのVALUEを全角文字にし、
他のブラウザで試した所
「サブミット」=「%A5%B5%A5%D6%A5%DF%A5%C3%A5%C8」
となるのですが、
問題のネスケで試すと、
「%A5%B5%A5%D6%A5%DF%A5%C3%A5%C」となり、
半角1文字分欠けてしまいます。
こちらのブラウザの設定でもおかしいのでしょうか?
No.4
- 回答日時:
#1です。
別に、POSTからGETにして使ってくださいと
言っているのではなく、GETの場合の引数が
ちゃんと出ているかどうかの確認をしてみては?
というつもりでした(^^;;
目的としては、引数としてちゃんと渡されているのに
表示がおかしい場合は、PERL側の問題。
引数自体がすでにおかしい場合は、ブラウザ側の
問題という切り分けをして欲しかったのです。
こういうブラウザが変わる事によって起こるバグは
ブラウザ自体のバグの場合もあれば、逆に
そのブラウザだけが正しい動きをしていて、
他のブラウザが勝手に補足しているだけ
という場合もあります。
ですので何が問題なのかというのを完全に切り分ける
のが解決の糸口になります。
切り分けた後は、PERLの処理ならば
細かくデバッグ文を入れていったり、
HTMLなら必要最小限のタグだけのページを
作って、そこからちょっとずつ現在の形に近づけて
いったり、逆に問題のタグを消してどうなるかなど
いろいろ試して行く事が多いです。
この回答への補足
問題を未解決で終わらせたくないので、よろしければ回答、もしくはアドバイスよろしくお願いします。
Perlのプログラムを細かく区切って、各変数にどんな値が代入されているのかを調べていったところ、末尾が欠けたり、VALUE値の消失の二つの問題が
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
の所で発生している事がわかりました。
上記の一文で、$queryの受け取っている「STDIN」の中身が、Netscape Communicator 4.7で受け取った際、行頭に「半角スペース」が入り、行末は「1バイト分」削れた状態で入っていました。
そのため、
$pasu1 = $form{'pasu1'};
では、サブルーチンで代入されているのは「$form{' pasu1'};」で、$pass1に代入しようとしても空っぽなのは当然な事でした。
行末については、
$queryに入れる長さを「$ENV{'CONTENT_LENGTH'}」にしているため、半角スペースが増えた分、行末が削れるという事でした。
・・・と結果的な原因はわかったのですが、
何故、「半角スペースが行頭に追加される」のかがわかりませんでした。
長さの設定を変更してみたりもしましたが、行末が欠けているのは相変わらずで、STDINの中で既に行末は切れてるようでした。
・・・ブラウザによるものなんでしょうか?
また、解決法はあるんでしょうか?
回答ありがとうございます。
アドバイスの受け取り方を勘違いしていたようで申し訳ないです。
色々試してみたのですが、
一番上の記入欄のデータは、
POSTでも受信はしている事がわかり、
サブルーチンの途中で消えてしまっているようでした。
送信ボタンの方は、
初めから文字列の末尾が欠けた状態で
またGETにしてもそうだったのですが、
原因が断定できないためもう少し調べてみようと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP php ログイン 1 2022/11/01 00:24
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Javascriptの変数をCGIに送る方法
-
open.window(javascript) を使...
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
WEBページを強制的に横画面で見...
-
select値をhiddenのvalueに渡し...
-
pythonのnumpyでの列(縦)ベク...
-
日本語文字化け(GETメソッド?)
-
EXCELとの連携
-
チェックボックスグループの一...
-
HTML プルダウンメニューの選択...
-
vsftpd+sslでアップロードできない
-
iis+cgiでmultipart/form-data...
-
INPUT TYPE
-
VB.net データーグリッドビュー...
-
チェックボックスの返す値
-
CGI経由でのPDFファイルをダウ...
-
「value」に2つの値をセットす...
-
postデータのあるページの再表示
-
VB初心者。小数点以下の表示で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Rubyのmechanizeを利用したファ...
-
open.window(javascript) を使...
-
さくらインターネットのCGI...
-
フォーム入力後の確認画面表示...
-
VBで表示したホームページの...
-
別サーバーのcgiへバイナリデー...
-
(Perl)ReadParseによるハッシ...
-
perlで自動ログインをしたいが...
-
htmlからcgiに変数を配列にして...
-
HTMLタグが使えるCGIスクリプト
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
select値をhiddenのvalueに渡し...
-
「value」に2つの値をセットす...
-
チェックボックスの返す値
-
INPUT TYPE
-
WEBページを強制的に横画面で見...
-
[HTML]プルダウンメニューの横...
-
VB.net データーグリッドビュー...
-
別formのhidden項目を自form値...
おすすめ情報