我使用perl进行ajax(POST方法),当我用下面的脚本读取POST查询时,我得到了我的查询URIencoded。
示例:已发送 - привет,已收到:%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82
拉丁语查询效果很好。脚本只是在某个地方用Google搜索。
脚本:
sub populatePostFields {
%_POST = ();
read( STDIN, $tmpStr, $ENV{ "CONTENT_LENGTH" } );
@parts = split( /\&/, $tmpStr );
foreach $part (@parts) {
( $name, $value ) = split( /\=/, $part );
$value =~ ( s/%23/\#/g );
$value =~ ( s/%2F/\//g );
$_POST{ "$name" } = $value;
}
}
答案 0 :(得分:3)
嗯,这不是特定于Perl的。发送时,Web浏览器需要对值进行URI编码。
您可以使用标准use CGI
模块为您解码表单字段 - 这是绝对值得推荐的,因为它会为您处理各种边缘情况,并且如果您决定转换为一个mod_perl
模块。
如果您正在运行CGI脚本,我也强烈建议您-T
行(shebang
)和{{1} #!/usr/bin/perl -T
帮助捕获可能在网络上容易被利用的东西。
use strict;
→
#!/usr/bin/perl -T
use strict;
use CGI;
my $q = CGI->new;
print "Content-Type: text/html\n\n";
print "<html><body><h1> Field FOO contains: ", $q->param('FOO'),
"</h1></body></html>\n\n";
您可以使用 <html><body><h1> Field FOO contains: привет </h1></body></html>
字符串 ->param(
来阅读各种表单字段;它将透明地处理GET和POST,并为您解码URI编码的字符串。
“不推荐的,艰难的方法”是使用表达式:
)