2011-10-20 13 views
0

現在、私はcgiスクリプトを処理するための自分のWebサーバーを作成中です。私の現在のテストperlスクリプトでは、私はコードをあなたが見ることができるよう、START_HTMLは、フォーム定義に割り当てられたアクションのパラメータを持っていないstart_formのデフォルトのアクション変数

print start_html("CGI Test Page"), 
    h1("CGI Test Page"), 
    h2("Post Test:"), 
    start_form(-method=>"POST",), 
    "Post Value: ",textfield('postKey'), 
    submit("Submit Post"), 
    end_form; 

のこの少しを持っています。私は奇妙なキャラクターが行動変数の末尾に付加することを取得しています

<form method="post" action="/cgitest.cgi%" enctype="multipart/form-data"> 

:しかし、このコードで、私はそのフォーム定義のための次のHTML出力を取得します。だから私の質問はこれです:私はperlスクリプトでアクション値を定義していないので、その環境変数を使ってアクションを定義していますか?ここで

+0

コードを再現することができません。つまり、あなたのコードのこの部分ではなく、あなたの設定の中に何か他のものがあるはずです。 – AFresh1

+0

@ Afresh1ああ、私はすでにそれが私の設定で何かを知っています。私はApacheや何かを実行していない、私は個人的に構築されたサーバーを実行しています。あなたが私にあなたがサーバーコード全体を与えることなく、あなたの目的のためにそれを再現する方法は本当にありません。したがって、このメソッドがデフォルトのアクション値として使用するものが分かっていれば、問題をcgiスクリプトに送信する特定の環境変数に分離できます。私の直感は、それがREQUEST_URI環境変数を使用していると私に伝えます。しかし、私がその変数のprintfを送信する前にそれを行うと、htmlのように末尾に文字が付きません。 – AndyPerfect

答えて

3

CGI.pm sourceから関連する部分である:

if (defined $action) { 
    $action = $self->_maybe_escapeHTML($action); 
} 
else { 
    $action = $self->_maybe_escapeHTML($self->request_uri || $self->self_url); 
} 

あなたが推測していたとして、あなたがアクションを定義しない場合、それは$ENV{'REQUEST_URI'}を使用しようとし、それが空の場合、それはのURLを使用していますスクリプト。そのURLを定義するサブルーチンはself_urlurlです。したがって、ソースコードでは、余分なパーセント記号がどこから来ているのかを設定するのに役立ちます。

関連する問題