0

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

4

1 回答 1

1

要获得已经解码的参数,我们需要Apache2::Requestlibapreq2覆盖底层类的行为,从而失去其 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方法,您就会得到一个名称列表。这是记录在案的(1 , 2),请仔细阅读。

于 2010-12-02T15:46:22.303 回答