如果 URL 包含当前系统区域设置不支持的 UTF-8 编码字符,则 IIS 似乎错误地将请求 URL 传递到 Web 应用程序。所有“不受支持的”字符都被问号 ('?') 替换。
示例:系统区域设置为挪威语。以下 URL 工作正常:
/myapp/Blåbærsyltetøy/
以下网址无效:
/myapp/черничный-джем/
在这两个 URL 中,非 ASCII 字符被编码为 UTF-8,然后进行百分比编码,因此实际的 URL 如下所示:
/myapp/Bl%C3%A5b%C3%A6rsyltet%C3%B8y/
/myapp/%D1%87%D0%B5%D1%80%D0%BD%D0%B8%D1%87%D0%BD%D1%8B%D0%B9-%D0%B4%D0%B6%D0%B5%D0%BC/
该应用程序使用两种处理请求的方式:
- wfastcgi + Python
- ISAPI + C++
两者都遇到同样的问题,如果 URL 仅包含系统语言环境支持的字符,则两者都没有问题。
在 ISAPI 的情况下,它看起来EXTENSION_CONTROL_BLOCK::lpszPathInfo
已经提供了一个百分比解码的 URL,其中所有“不受支持的”字符都已被问号替换。该EXTENSION_CONTROL_BLOCK::lpszPathInfo
属性是一个多字节字符串,并且没有这种结构的宽字符串版本。
有没有办法获取原始的百分比编码 URL 或阻止 IIS 解码 URL 以解决问题?