在mod_perl2中获取UTF-8请求参数字符串

时间:2010-12-01 20:30:00

标签: perl unicode utf-8 apache2 mod-perl

我正在将mod_perl2用于网站,并使用CGI :: Apache2 :: Wrapper来获取页面的请求参数(例如发布数据)。我注意到$ req-> param(“parameter”)函数返回的字符串不是UTF-8。如果我按原样使用字符串,最终会出现乱码结果,所以我需要使用Encode :: decode_utf8()对其进行解码。无论如何要么已经将参数解码为UTF-8字符串或循环参数并安全地解码它们?

1 个答案:

答案 0 :(得分:1)

要获取已解码的参数,我们需要从 libapreq2 覆盖基础类Apache2::Request的行为,从而失去其XS速度优势。但这甚至不是直截了当的,不幸的是我们被CGI::Apache2::Wrapper构造函数破坏了:

unless (defined $r and ref($r) and ref($r) eq 'Apache2::RequestRec') {

这是错误的OO编程,应该说

… $r->isa('Apache2::RequestRec')

或者可能完全放弃类名,只测试行为(… $r->can('param'))。

我说,有了这些障碍,这是不值得的。我建议保留现有解决方案明确解码参数。很明显。

要遍历请求参数,只需将参数传递给param方法,即可获得名称列表。记录了这些内容(12),请仔细阅读。