スコットの回答にコメントとして投稿していましたが、長くなりすぎたので...
ジョンは次のように書いています。
次の例を実行すると、値が 0 になりますが、それはキー値全体であるべきだと思いますか?
<cfoutput>
<cfset theUrl = "https://docs.google.com/spreadsheet/ccc?key=0AthiZNZ73LBndUzRTUkplbmNhYWc##gid=0" />
<cfset theUrl = listRest(theUrl, "?")>
<cfloop list="#theUrl#" index="URLPiece" delimiters="&">
Key: #listFirst(urlPiece, "=")# Value: #listLast(urlPiece, "=")# <br />
</cfloop>
</cfoutput>
この例の URL が失敗する理由は、ページ セグメント (ハッシュの後のビット) が含まれているためです。これは、クエリ文字列を解析する前に取り除く必要があります。
キー/値の部分を でラップして、正しい変数/値を取得することも重要ですUrlDecode
。
さらに、値に等号を含めることは完全に許容されるため、値として?key==
返す必要があります。=
つまり、ListLast
を aに変更し、trueListRest
に設定includeEmptyFields
します。
また、次のようなクエリ文字列がある場合?a&b
、値をどちらかtrue
または空の文字列に設定するのが慣例です。現在のコードはキー名に設定されていますが、これは間違っています。
要約すると、ここに関数があります:
<cffunction name="getParamsFromUrlString" returntype="Struct" output=false >
<cfargument name="UrlString" type="String" required />
<cfargument name="Separator" type="String" default="?" />
<cfargument name="Delimiter" type="String" default="&" />
<cfargument name="AssignOp" type="String" default="=" />
<cfargument name="EmptyVars" type="String" default="" />
<cfset var QueryString = ListRest( ListFirst( Arguments.UrlString , '##' ) , Arguments.Separator ) />
<cfset var Result = {} />
<cfloop index="local.QueryPiece" list=#QueryString# delimiters="#Arguments.Delimiter#">
<cfif NOT find(Arguments.AssignOp,QueryPiece)>
<cfset Result[ UrlDecode( QueryPiece ) ] = Arguments.EmptyVars />
<cfelse>
<cfset Result[ UrlDecode( ListFirst(QueryPiece,Arguments.AssignOp) ) ]
= UrlDecode( ListRest(QueryPiece,Arguments.AssignOp,true) ) />
</cfif>
</cfloop>
<cfreturn Result />
</cffunction>
次のように簡単に使用できます。
<cfset theUrl = "https://docs.google.com/spreadsheet/ccc?key=0AthiZNZ73LBndUzRTUkplbmNhYWc##gid=0" />
<cfset Data = getParamsFromUrlString( theUrl ) />
<cfdump var=#Data# />
または、次のような複雑な非標準の URL 文字列で使用できます。
<cfset theUrl = "https://somewhere/index.jsp;x:145;y:54;z:1;f;d:%23%23;w:%3B" />
<cfset Data = getParamsFromUrlString( theUrl , ';' , ';' , ':' , 'true' ) />
<cfdump var=#Data# />
そして(うまくいけば)その間のすべて。