是否可以在ColdFusion MX 7中保留GET字段名称的大小写(案例保留在CF9中)?我不知疲倦地搜索了答案,但所有解决方案似乎都是POST特定的,而这是一个GET。
N.B。我知道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
有关我如何保留案件的任何建议?非常感谢帮助。
答案 0 :(得分:8)
另一种选择是使用getParameterMap(),它返回区分大小写的参数结构。
<cfset map = getPageContext().getRequest().getParameterMap()>
<cfoutput>#structKeyList(map)#</cfoutput>
答案 1 :(得分: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值都将丢失。
答案 2 :(得分:3)
您使用的是哪个版本的CF?在ACF9和Railo 3.3案件中肯定会保留。
为了测试目的,我对您的示例网址进行了一些更改:
?nAmE1=ValuE1&name2=value2&name3=value3
代码:
<cfdump var="#url#" />
<cfloop collection="#url#" item="key">
<cfoutput>#key#<br/></cfoutput>
</cfloop>
<cfoutput>#structKeyList(url)#</cfoutput>
ACF9:
Railo:
答案 3 :(得分:0)
据我所知,这是不可能的。 Coldfusion总是大写结构键名。如果具有有限的URL密钥列表,则只需创建逗号分隔的新密钥列表并作为单独的URL密钥传递。这就是我以前用过的。
答案 4 :(得分:0)
如果你想维护大小写,你只需使用数组表示法在循环中构建结构。
<cfset paramStruct = StructNew()>
<cfloop list = "#CGI.QUERY_STRING#" index="i" delimiters="&">
<cfset paramStruct[ listFirst(i,"=") ] = listLast(i,"=")>
</cfloop>
<cfdump var="#paramStruct#">
我没有对此进行测试,但我认为它会起作用。