gpt4 book ai didi

iis - 在 ColdFusion 中使用 cgi.PATH_INFO 在 URL 中使用 unicode 的问题

转载 作者:行者123 更新时间:2023-12-01 00:02:29 31 4
gpt4 key购买 nike

我的 ColdFusion(IIS 6 上的 MX7)站点具有搜索功能,可将搜索词附加到 URL,例如http://www.example.com/search.cfm/searchterm .

我遇到的问题是这是一个多语言网站,所以搜索词可能是另一种语言,例如القاهرة导致搜索 URL,例如 http://www.example.com/search.cfm/القاهرة
问题是当我从 URL 中检索搜索词时。我正在使用 cgi.PATH_INFO检索搜索页面的路径和搜索词并从中提取搜索词,例如/search.cfm/searchterm但是,当在搜索中使用 unicode 字符时,它们会被转换为问号,例如/search.cfm/?????? .

这些看起来是实际的问号,而不是浏览器无法格式化 unicode 字符,或者它们在输出时被破坏。

我找不到任何关于 ColdFusion 是否支持 URL 中的 unicode 的信息,或者我如何解决这个问题并以某种方式获取完整的 URL - 有没有人有任何想法?

干杯,

汤姆

编辑 :进一步的研究使我相信该问题可能与 IIS 而不是 ColdFusion 有关,但我最初的查询仍然有效。

进一步编辑
GetPageContext().GetRequest().GetRequestUrl().ToString()的结果是 http://www.example.com/search.cfm/searchterm/?????所以看起来这个问题相当深入。

最佳答案

是的,这真的不是 ColdFusion 的错。这是一个常见的问题。

这主要是原始 CGI 规范的错误,它指定了 PATH_INFO必须进行 % 解码,从而丢失原始 %xx字节序列可以让您找出真正的字符的含义。

这部分是 IIS 的错,因为它总是试图读取提交的 %xx路径部分中的字节为 UTF-8 编码的 Unicode(除非路径不是有效的 UTF-8 字节序列,在这种情况下,它为 Windows 默认代码页填充,但您无法发现这种情况发生了) .这样做后,它将它作为 Unicode 字符串放入环境变量中(因为 envvars 在 Windows 下是 Unicode)。

然而,大多数使用 C stdio 的基于字节的工具(我假设这适用于 ColdFusion,就像在 Perl、Python 2、PHP 等下一样)然后尝试将环境变量读取为字节,并且 MS C 运行时编码Unicode 内容再次使用 Windows 默认代码页。因此,任何不适合默认代码页的字符都将永远丢失。这将包括在西方 Windows 安装上运行时的阿拉伯字符。

一个聪明的脚本,可以直接访问 Win32 GetEnvironmentVariableW API 可以调用它来检索 native Unicode 环境变量,然后他们可以将其编码为 UTF-8 或他们想要的任何其他内容,假设输入也是 UTF-8(这是您今天通常想要的)。但是,我认为 CodeFusion 不会为您提供此访问权限,并且无论如何它只能从 IIS6 开始; IIS5.x 会在它们到达环境变量之前丢弃任何非默认代码页字符。

否则,最好的选择是 URL 重写。如果CF上面的一层可以转换search.cfm/القاهرةsearch.cfm/?q=القاهرة那么您就不会面临与 QUERY_STRING 相同的问题变量,不像 PATH_INFO , 未指定为 %-decoded,因此 %xx字节保留在 CF 级别的工具可以看到的地方。

关于iis - 在 ColdFusion 中使用 cgi.PATH_INFO 在 URL 中使用 unicode 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2764446/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com