apache2 log中的url查询字符串中文乱码

当IE在访问如下url

http://localhost/a.html?q=中文

在apache2 log里能看到以下内容

GET /a.html?q=\xd6\xd0\xce\xc4 HTTP/1.1

而在firefox中访问相同url

日志中看到的内容是对字符串进行urlencode过后的格式:

GET /a.html?q=%D6%D0%CE%C4 HTTP/1.1

现在IE下,\xd6在\x后面的d6是个16进制值,如果想将\xd6\xd0\xce\xc4直接还原出中文2个字比较困难。

不过在与firefox中的日志对比之下,能看出只要直接将\x替换成%,然后用php的urldecode反解析就能得到对应的字符串。

另外说明一点

这个例子中看到的值%D6%D0%CE%C4,是按gbk字符集进行urlencode计算得到的对应值,如果urldecode反解析得到是乱码,则日志记录的应该是utf-8格式的urlencode值,用php的iconv函数处理一下。