关于URL参数传递乱码的问题

关于URL参数传递乱码的问题

在win2003下,安装了apache2.2 ,perl 5.8.8。

当我在 URL 中传递一个参数,如: test.cgi?title=我的测试
接收到的参数为乱码

谁能告诉我怎么修改啊!

谢谢
不是乱码,是 URL 编码。你需要解码。
看看这个:
http://search.cpan.org/~gaas/URI-1.35/URI/Escape.pm
请问怎么转回中文?

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl

use CGI qw(:standard);
use URI::Escape;
use Encode qw(encode decode);

print "Content-Type:text/html \n\n";
my $in = new CGI();

my $t = $in->param('t');
#$t = uri_escape(encode("GB2312",$t));
#$t =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
#$t = encode("GB2312",$t);
print $t;

当 调用 test.cgi?t=我的站点
时是乱的

就是说 我在参数传递的时候不修改,接受参数的时候 是否可以转回来?

flw 大师再帮我看看


QUOTE:
原帖由 yhsmengdi 于 2006-9-7 13:57 发表
在win2003下,安装了apache2.2 ,perl 5.8.8。

当我在 URL 中传递一个参数,如: test.cgi?title=我的测试
接收到的参数为乱码

谁能告诉我怎么修改啊!

谢谢

Hallo,

Apache will automatically encoded the query string "title=我的测试" as URI-Encoding
string as following:
$ENV{QUERY_STRING} =  title=%E6%88%91%E7%9A%84%E6%B5%8B%E8%AF%95
using the method uri_unescape from URI::Escape to decode the querystring, as default
the decode string is UTF-8 fomat.
In order to display in chinese, you must use Encode::decode('UTF-8', STRING) and then
Encode::encode('GB2312', STRING) again.

here is demo code test.cgi again:
and point the browser to /cgi-bin/test.cgi?title=我的测试

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl -w
use strict;
use URI::Escape;
use Encode;

my $qstr = '';
my $unescaped_qstr = '';
print qq(Content-type: text/html; charset=GB2312);
print qq(\n\n);
if ($ENV{'QUERY_STRING'}) {
    $qstr = $ENV{'QUERY_STRING'};
    $unescaped_qstr = uri_unescape($qstr);
    print "query: uri-encoded: $qstr<br>\n";
    print "uri-unescaped as utf-8: $unescaped_qstr<br>\n";
    print "show GB2312:", encode('GB2312', decode("UTF-8", $unescaped_qstr)), "<br>\n";
}
else {
    print "no query string<br>\n";
}

regards, ulmer
好贴,多谢楼上的兄弟!!!
遇到同样问题,尚未解决,在一帖子里apile老大说是十六进制,不知道怎么转换成字符串?


QUOTE:
原帖由 ulmer 于 2006-9-7 17:21 发表


Hallo,

Apache will automatically encoded the query string "title=我的测试" as URI-Encoding
string as following:
$ENV{QUERY_STRING} =  title=%E6%88%91%E7%9A%84%E6%B5%8B%E8%AF%95
using th ...

麻烦问下大哥

我是用的Apache2.0,为什么没有自动转换呢?
出现的是"http://localhost/cgi-bin/article/article.cgi?type=栏目ID1"

为什么还是汉字???

是有什么地方需要设置吗?