Apache模块request_rec-> args无法处理url编码实体

时间:2015-04-15 12:55:58

标签: apache apache-modules

在我的ap_hook_handler中,当查询字符串的某些部分包含url编码实体时,我遇到了request_rec-> args的奇怪行为。

以下是我的发现:

场景#1:对查询字符串中的第一个“e”进行编码:

  

http://localhost/test?group=%65mployees

结果:
r-> uri:/ test
r-> args:“group =%mployees”(观察很多空格)

场景#2:编码第二个'e':

  

http://localhost/test?group=employ%65es

结果:
r-> uri:/ test
r-> args:“group =雇用0.000000e-01s”

场景#3:编码最后一个'e':

  

http://localhost/test?group=employe%65s

结果:seg fault

当我对路径的任何部分(不是查询字符串)进行url编码时,Apache的行为如下:

场景#4:在路径中编码'e'而不是查询字符串:

  

http://localhost/t%65st

结果:
r-> uri:/ test(预期)
r-> args:NULL(预期)

为什么'args'和'uri'处理不同的url编码?如何在我的模块中获取规范化的查询字符串,就像我可以使用'request_rec-> uri'一样?

1 个答案:

答案 0 :(得分:0)

我在日志中得到奇怪结果的原因是因为我将查询字符串作为参数传递给printf,百分比符号是一个特殊字符。

我现在正在重建网址,将其传递给ap_unescape_url函数以解码网址。

现在我想到了,Apache没有自动解码args参数是有道理的,因为这实际上是"数据"网址的一部分而不是路径相关。