如何从URL字符串中检索(准)数组?

| 我想实现在.net中可以轻松完成的任务。 我想做的是传递多个相同名称的URL参数以构建这些值的数组。 换句话说,我想采用以下URL字符串:
http://www.example.com/Test.cfc?method=myArrayTest&foo=1&foo=2&foo=3
并从URL参数\“ foo \”构建一个数组。 在.net / C#中,我可以执行以下操作:
[WebMethod]
myArrayTest(string[] foo)
然后将根据变量“ foo”构建一个字符串数组。 到目前为止,我所做的是这样的:
<cffunction name=\"myArrayTest\" access=\"remote\" returntype=\"string\">
    <cfargument name=\"foo\" type=\"string\" required=\"yes\">
这将输出:
1,2,3
我对此并不感到兴奋,因为它只是一个逗号分隔的字符串,而且我恐怕URL中可能会传递逗号(当然是经过编码的),然后如果我尝试遍历逗号,可能会被误解为单独的参数。 因此,我对如何实现这一目标感到困惑。 有任何想法吗?? 提前致谢!!     
已邀请:
        好吧,如果您可以解析URL,则可以使用以下\“ raw \”方法:
<cffunction name=\"myArrayTest\" access=\"remote\" output=\"false\">

    <cfset var local = {} />

    <!--- parse raw query --->
    <cfset local.args = ListToArray(cgi.QUERY_STRING, \"&\") />

    <!--- grab only foo\'s values --->
    <cfset local.foo = [] />
    <cfloop array=\"#local.args#\" index=\"local.a\">
        <cfif Left(local.a, 3) EQ \"foo\">
            <cfset ArrayAppend(local.foo, ListLast(local.a, \"=\")) />
        </cfif>
    </cfloop>

    <cfreturn SerializeJSON(local.foo) />

</cffunction>
我已使用以下查询对它进行了测试:
?method=myArrayTest&foo=1&foo=2&foo=3,3
,看起来可以正常工作。 奖金。 Railo的最高提示:如果按以下格式设置查询格式,则将在URL范围
?method=myArrayTest&foo[]=1&foo[]=2&foo[]=3,3
中自动创建此数组。     
        编辑:Sergii的方法更具通用性。但是,如果要解析当前的URL,并且不需要修改结果数组,则另一个选择是使用getPageContext()从基础请求中提取参数。请注意以下两个怪癖。
<!--- note: duplicate forces the map to be case-INsensitive --->
<cfset params = duplicate(getPageContext().getRequest().getParameterMap())>
<cfset quasiArray = []>
<cfif structKeyExists(params, \"foo\")>
    <!--- note: this is not a *true* CF array --->
    <!--- you can do most things with it, but you cannot append data to it --->
    <cfset quasiArray = params[\"foo\"]>
</cfif>
<cfdump var=\"#quasiArray#\">
    
        
listToArray( arguments.foo )
应该给您您想要的。     

要回复问题请先登录注册