【问题标题】:Getting UTF-8 Request Parameter Strings in mod_perl2在 mod_perl2 中获取 UTF-8 请求参数字符串
【发布时间】:2010-12-01 20:30:00
【问题描述】:

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

【问题讨论】:

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


    【解决方案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),请仔细阅读。

    【讨论】:

    • 谢谢,这几乎证实了我所害怕的。我最初的想法是使用 $req->param() 来获取表格并循环访问那里的参数。我可以获取参数的表对象,但是当我尝试设置任何参数时,它会出错,说 STORE 没有实现。
    猜你喜欢
    • 2011-09-19
    • 2012-06-15
    • 2013-05-13
    • 2012-11-10
    • 2020-03-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    相关资源
    最近更新 更多