2010-12-01 26 views
0

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

回答

1

来获取参数已经解码的,我们需要从libapreq2覆盖基础类Apache2::Request的行为,从而失去其XS速度优势。但是,这甚至不是简单的可能,因为不幸的是我们通过CGI::Apache2::Wrapper构造破坏:

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

这是错误的面向对象编程,应该说

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

或者是干脆,只是测试放弃的类名行为(… $r->can('param'))。

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

要遍历请求参数,只需将参数传递给param方法,并获得名称列表。这是记录(1,2),请仔细阅读。

+0

谢谢,这几乎证实了我所害怕的。我最初的想法是使用$ req-> param()来获取表格并在那里通过参数循环。我可以获取参数的表格对象,但是当我尝试设置任何参数时,它会错误地指出STORE未实现。 – 2010-12-03 04:22:53