【问题标题】:PERL/CGI- gets more than text from input textareaPERL/CGI- 从输入文本区域获取的不仅仅是文本
【发布时间】:2016-08-08 15:29:44
【问题描述】:

我对perl一点也不熟悉,但对html有一些了解。我目前正在尝试从一个在线程序配置代码,该程序处理从用户输入的文本以计算和输出一些重要的数字,以便对本地目录中包含文本的大量文件执行相同的操作。问题在于我对来自站点的代码如何或为什么通过查找 & 和 = 来拆分输入的文本缺乏了解,因为输入的文本从不包含这些字符,我的文件也不包含。以下是在线程序中的一些代码:

if ($ENV{'REQUEST_METHOD'} ne "POST") { 
    &error('Error','Use Standard Input by METHOD=POST'); 
}

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

if ($buffer eq '') { 
    &error('Error','Can not execute directly','Check the usage'); 
}

$ref = $ENV{'HTTP_REFERER'};

@pairs = split(/&/,$buffer);

foreach $pair (@pairs) {
    ($name,$value) = split(/=/,$pair);
    if ($name eq "ATOMS") { $atoms = $value; }

然后它使用这些“对”来适当地计算所需的数字。来自用户的输入只是一个名为“ATOMS”的文本区域,表单动作是 cgi 脚本:

<form method=POST action="/path/to/the/cgi/file.cgi">
<textarea name="ATOMS" rows=20 cols=80></textarea>
</form>

我忽略了 html 和 perl 代码的不太重要的细节。到目前为止,我所能做的就是以文本格式从给定目录中的所有文件中获取所有内容,但是当我将其输入到使用 textarea 中的文本来计算值的脚本中时(代替变量 $buffer),它不起作用,我怀疑这是由于拆分代码,它找不到 & 和 = 符号。代码如何从在线脚本中获取这些符号,以及如何实现它以用于我的本地文件?如果需要任何其他信息,请告诉我,提前致谢!

【问题讨论】:

  • 那里的代码是Old,大写O。

标签: html perl cgi


【解决方案1】:

编码方案表单使用(默认情况下)通过 HTTP POST 数据由 key=value 对(因此是 =)组成,它们由 &amp; 字符分隔。

后者对您的表单无关紧要,因为它只有一个控件。

the HTML 4 specification 对此进行了非常简洁的描述,the HTML 5 specification 对此进行了更详细的描述。

如果您不处理表单中的数据,则应删除所有表单解码代码。

【讨论】:

  • 感谢您的帮助!我只是按照您的建议删除了解码代码,它的工作原理与在线完全一样!
【解决方案2】:

不确定您从哪里获得该代码,但它是史前时期的(从上个千年开始)。

你应该可以全部替换为。

use CGI ':cgi';

my $atoms = param('ATOMS');

【讨论】:

    猜你喜欢
    • 2016-10-20
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    相关资源
    最近更新 更多