Html 开始表单的默认操作变量

Html 开始表单的默认操作变量,html,perl,Html,Perl,我目前正在编写自己的web服务器来处理cgi脚本。在我当前的测试perl脚本中,我有一些代码 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; 如您所见,st

我目前正在编写自己的web服务器来处理cgi脚本。在我当前的测试perl脚本中,我有一些代码

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;
如您所见,start_html在表单定义中没有指定任何操作参数。但通过这段代码,我得到了该表单定义的以下html输出:

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


我将那个奇怪的字符附加到action变量的末尾。所以我的问题是:因为我没有在perl脚本中定义action值,所以它使用哪个环境变量来定义它的action?

以下是:


正如您所猜测的,如果不定义操作,它将尝试使用
$ENV{'REQUEST_URI'}
,但如果为空,则使用脚本的URL。定义该URL的子例程是和,因此希望那里的源代码能帮助您确定配置中额外百分号的来源。

以下是:


正如您所猜测的,如果不定义操作,它将尝试使用
$ENV{'REQUEST_URI'}
,但如果为空,则使用脚本的URL。定义该URL的子例程是和,因此希望那里的源代码能够帮助您确定配置中额外百分比符号的来源。

我无法用您的代码重现。这意味着它是配置中的其他内容,而不是代码的这一部分。@1哦,我已经知道它是配置中的内容。我没有运行Apache或其他任何东西,我运行的是一个个人构建的服务器。如果我不给你完整的服务器代码,你真的无法复制它。因此,如果我知道这个方法使用什么作为默认操作值,我可以将问题隔离到我发送给cgi脚本的某个环境变量。我的直觉告诉我,它使用REQUEST_URI环境变量,但如果在发送该变量之前对其进行printf处理,它就不会像html中那样将字符固定在末尾。我无法用您的代码重现。这意味着它是配置中的其他内容,而不是代码的这一部分。@1哦,我已经知道它是配置中的内容。我没有运行Apache或其他任何东西,我运行的是一个个人构建的服务器。如果我不给你完整的服务器代码,你真的无法复制它。因此,如果我知道这个方法使用什么作为默认操作值,我可以将问题隔离到我发送给cgi脚本的某个环境变量。我的直觉告诉我,它使用REQUEST_URI环境变量,但如果在发送该变量之前对其进行printf处理,它就不会像在html中那样将该字符附加到末尾。
if (defined $action) {
   $action = $self->_maybe_escapeHTML($action);
}
else {
   $action = $self->_maybe_escapeHTML($self->request_uri || $self->self_url);
}