2010-12-01 4 views
0

私はウェブサイトにmod_perl2を使用しており、CGI :: Apache2 :: Wrapperを使用してページのリクエストパラメータ(例:ポストデータ)を取得しています。 $ req-> param( "parameter")関数が返す文字列がUTF-8ではないことに気付きました。私が文字列をそのまま使用すると文字化けした結果に終わることがあるので、Encode :: decode_utf8()を使ってデコードする必要があります。 UTF-8文字列に既にデコードされたパラメータを取得するか、パラメータをループして安全にデコードするかのどちらかですか?mod_perl2でUTF-8リクエストパラメータ文字列を取得する

答えて

1

がパラメータが既に復号化するには、我々はこのようにそのXSの速度の利点を失って、libapreq2から基本となるクラスApache2::Requestの動作をオーバーライドする必要があります。

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

これは間違ったオブジェクト指向プログラミングは、それは完全に、ちょうどテストクラス名を見送るおそらく

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

かを言う必要がありますされています。残念ながら、我々はCGI::Apache2::Wrapperコンストラクタによって妨害されているようしかし、それは、可能であっても簡単ではありません行動のために(… $r->can('param'))。

私は、これらの障害では、それは価値がないと言います。私はにパラメータを明示的にデコードする既存のソリューションを保つことをお勧めします。十分にクリアです。

リクエストパラメータをループするには、単にparamメソッドに引数を渡さないでください。名前のリストが表示されます。これは文書化されています(12)、より慎重にお読みください。

+0

ありがとう、それは私が恐れていたことをかなり確認しました。私の最初の考えは、$ req-> param()を使ってテーブルを取得し、そこでパラメータをループすることでした。私はパラメータのテーブルオブジェクトを取得することができましたが、パラメータを設定しようとするとSTOREが実装されていないというエラーが表示されました。 –

関連する問題