0

Webサイトにmod_perl2を使用しており、CGI :: Apache2 :: Wrapperを使用してページのリクエストパラメーター(投稿データなど)を取得しています。$ req-> param( "parameter")関数が返す文字列がUTF-8ではないことに気づきました。文字列をそのまま使用すると、結果が文字化けする可能性があるため、Encode :: decode_utf8()を使用してデコードする必要があります。パラメータをすでにUTF-8文字列にデコードするか、パラメータをループして安全にデコードする方法はありますか?

4

1 に答える 1

1

すでにデコードされたパラメーターを取得するには、libapreq2Apache2::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で、名前のリストが取得されます。これは文書化されています ( 1 , 2 )。もっと注意深く読んでください。

于 2010-12-02T15:46:22.303 に答える