0

是否可以在 ColdFusion MX 7 中保留 GET 字段名称的大小写(在 CF9 中保留大小写)?我一直在不知疲倦地寻找答案,但所有解决方案似乎都是 POST 特定的,而这是一个 GET。

NB 我知道 RFC2616 声明 HTTP 字段名称不区分大小写,但我们都知道如何容易偏离规范......

例子:

给定以下 ColdFusion 脚本(我们称其为 ' url-case-test.cfm '):

<html>
    <body>
        <cfoutput>
            #structKeyList(url)#
        </cfoutput>
    </body>
</html>

并使用以下参数修饰 URL 导航到此脚本:

http://localhost:8080/cfusion/url-case-test.cfm?name1=value1&name2=value2&name3=value3

我得到输出:

NAME1,NAME2,NAME3

关于我如何保存案件的任何建议?帮助将不胜感激。

4

5 回答 5

8

另一种选择是使用 getParameterMap() 返回区分大小写的参数结构。

<cfset map = getPageContext().getRequest().getParameterMap()>
<cfoutput>#structKeyList(map)#</cfoutput>
于 2011-07-25T16:50:00.100 回答
5

我认为您唯一能做的就是解析 CGI.QUERY_STRING 值。

<cfset paramList="" />
<cfloop list="#CGI.QUERY_STRING#" index="qsparam" delimiters="&">
  <cfset paramList=listAppend(paramList,listFirst(qsparam,"=")) />
</cfloop>
<cfoutput>#paramList#</cfoutput>

但是,不要将 URL 参数作为键存储在结构中,否则您将再次丢失您的案例。

这显然不理想,因为您通过 cfparam 或 cfset(或任何其他方式对 URL 对象进行操作)设置的任何 URL 值都会丢失。

于 2011-07-25T13:52:17.193 回答
3

您使用的是哪个版本的 CF?在 ACF9 和 Railo 3.3 的情况下肯定被保留了下来。

出于测试目的,我稍微更改了您的示例 URL:

?nAmE1=ValuE1&name2=value2&name3=value3

代码:

<cfdump var="#url#" />

<cfloop collection="#url#" item="key">
    <cfoutput>#key#<br/></cfoutput>
</cfloop>

<cfoutput>#structKeyList(url)#</cfoutput>

ACF9:

在此处输入图像描述

雷洛:

在此处输入图像描述

于 2011-07-25T11:44:04.203 回答
0

如果您想保持大小写,您只需使用数组表示法在循环中构建结构。

<cfset paramStruct = StructNew()>
<cfloop list = "#CGI.QUERY_STRING#" index="i" delimiters="&">
  <cfset paramStruct[ listFirst(i,"=") ] = listLast(i,"=")>
</cfloop>

<cfdump var="#paramStruct#">

我没有对此进行测试,但我认为它会起作用。

于 2013-08-07T03:57:13.560 回答
0

据我所知,这是不可能的。Coldfusion 总是大写结构键名。如果 URL 键列表有限,则只需创建逗号分隔的新键列表并作为单独的 URL 键传递。这是我以前用过的。

于 2011-07-25T10:03:00.490 回答