私の ap_hook_handler では、クエリ文字列の一部に URL エンコードされたエンティティが含まれている場合、request_rec->args で奇妙な動作が発生します。
ここに私の発見があります:
シナリオ #1: クエリ文字列の最初の 'e' をエンコードします。
結果:
r->uri: /test
r->args: "group= %mployees" (多くのスペースに注意してください)
シナリオ #2: 2 番目の「e」をエンコードします。
結果:
r->uri: /test
r->args: "group=employ 0.000000e-01s"
シナリオ #3: 最後の「e」をエンコードします。
結果:セグフォルト
パスの任意の部分 (クエリ文字列ではない) を URL エンコードすると、Apache は次のように動作します。
シナリオ #4: クエリ文字列の代わりにパスで「e」をエンコードします。
結果:
r->uri: /test (予期される)
r->args: NULL (予期される)
'args' と 'uri' で URL エンコーディングの処理が異なるのはなぜですか? 'request_rec->uri' でできるように、モジュール内で正規化されたクエリ文字列を取得するにはどうすればよいですか?