我正在通过网络表单收集文本,并注意到当我的Perl CGI收集文本时,所有“+”实例都会转换为“”。我在提交之前通过JavaScript转义运行文本,但是转义似乎留下+未改变。
我必须有一些非常明显的东西......我如何发送字符串“2 + 2 = 4”而没有以“2 2 = 4”的形式到达?
答案 0 :(得分:4)
对于非ASCII字符,escape和unescape函数无法正常工作,并且已弃用。在JavaScript 1.5及更高版本中,使用encodeURI,decodeURI,encodeURIComponent和decodeURIComponent。
将escape
替换为encodeURIComponent
答案 1 :(得分:3)
您在网址中的+
'应编码为%2B
:
http://www.example.com/myscript.ext?a=2%20%2B%202%20=%204
将给出= 2 + 2 = 4
在Javascript中,这意味着使用encodeURIComponent
函数:代码的这一部分:
encodeURIComponent('2 + 2 = 4')
会给:
"2%20%2B%202%20%3D%204"
请注意+
已编码。
虽然这一个:
escape('2 + 2 = 4')
只会给:
"2%20+%202%20%3D%204"
请注意+
未编码。
答案 2 :(得分:1)
您可以将+
编码为%2B
,如下所示:http://www.google.com/search?q=2+%2B+2
答案 3 :(得分:1)
我不知道你使用JavaScript转义是什么意思。浏览器将正确编码表单字段值,CGI.pm将正确解码它们。
例如,
#!/usr/bin/perl
use strict; use warnings;
use CGI;
my $cgi = CGI->new;
if ( $cgi->param ) {
process_form($cgi);
}
else {
show_form($cgi);
}
sub process_form {
my ($cgi) = @_;
print $cgi->header('text/plain'),
$cgi->param('entry'), "\n";
}
sub show_form {
my ($cgi) = @_;
print $cgi->header, <<EO_HTML;
<!DOCTYPE HTML>
<html><head><title>Test +</title></head>
<body><form>
<input name="entry"><input type="submit">
</form></body></html>
EO_HTML
}
我在输入字段中使用2+2=4
提交此表单时获得的输出是:
2+2=4