我正在使用多种形式的Web应用程序,用户需要在其上输入通常包含空格和/或加号的数据。从Perl中的CGI输入保留加号
该数据一般通过GET
请求发送;或通过POST
请求与application/x-www-form-urlencoded
Content-Type标头。
我试过使用Perl的CGI
模块中的Vars()
和param
,但这两种方法都坚持要将+
标志转换为空格。
CGI
模块是否提供任何机制来保存+
标志;或者我应该沟并手动解析STDIN
输入?
注意:
随着大量的形式(在百),并且具有CGI预处理在一个集中的实用程序库发生的事情,我向服务器端解决方案相当偏颇,而不是客户端方法(换句话说,我宁愿在预处理代码上处理一次问题,而不是在数百个地方添加JS噪声)。
在此先感谢您提供的任何帮助。
例:
作为评价请求,这里是一些代码,触发问题的(简化的)样品。
HTML
<form action="/cgi-bin/some-script.pl">
<input name="some_field" value="1 + 1 is 2">
<input name="submit" type="submit" value="Submit">
</form>
的Perl
use CGI;
my $some_variable = CGI::param('some_field');
与默认值submiting形式和运行的服务器端代码后,$some_variable
的值是"1 1 is 2"
(有1之间有三个空格,无论是SO网站还是浏览器都可能将它们折叠成一个空格); 期望的结果将在该变量中获得值"1 + 1 is 2"
。
也许你可以发布一段简短的代码片段,说明哪些步骤导致了这个问题。 – DavidO 2012-07-10 08:40:38
在将'+符号传递给CGI之前,您可以简单地将'+'符号编码为'%2B'。 – dgw 2012-07-10 09:00:11
@dgw:感谢您的建议,但可以在服务器端完成,而无需预先处理整个输入?如问题所述,服务器端解决方案比客户端更可取;如果我必须预先处理perl脚本中的整个输入,那么不会比一路走下去并手动解析它。 – 2012-07-10 09:08:25