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

时间:2011-06-15 01:15:21

标签: coldfusion coldfusion-9

我想在.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中可能会有逗号(当然是编码的),然后如果我尝试循环逗号,可能会被误解作为一个单独的参数。

所以,我很难理解如何实现这一目标。

任何想法??

提前致谢!!

3 个答案:

答案 0 :(得分: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#">

答案 1 :(得分:2)

好吧,如果您对解析网址没问题,那么遵循“原始”方法可能对您有用:

<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中自动创建。

答案 2 :(得分:0)

listToArray( arguments.foo )应该会给你你想要的东西。