To follow up my parseUri() function, here are several more UDFs I've written recently to help with URI management:
- getPageUri()
Returns a struct containing the relative and absolute URIs of the current page. The difference betweengetPageUri().relative
andCGI.SCRIPT_NAME
is that the former will include the query string, if present. - matchUri(testUri, [masterUri])
Returns a Boolean indicating whether or not two URIs are the same, disregarding the following differences:- Fragments (page anchors), e.g., "#top".
- Inclusion of "index.cfm" in paths, e.g., "/dir/" vs. "/dir/index.cfm" (supports trailing query strings).
masterUri
is not provided, the current page is used for comparison (supports both relative and absolute URIs). - replaceUriQueryKey(uri, key, substring)
Replaces a URI query key and its value with a supplied key=value pair. Works with relative and absolute URIs, as well as standalone query strings (with or without a leading "?"). This is also used to support the following two UDFs: - addUriQueryKey(uri, key, value)
Removes any existing instances of the supplied key, then appends it together with the provided value to the provided URI. - removeUriQueryKey(uri, key)
Removes one or more query keys (comma delimited) and their values from the provided URI.
Now that I have these at my disposal, I frequently find myself using them in combination with each other. E.g.:
<a href="<cfoutput>#addUriQueryKey( getPageUri().relative, "key", "value" )#</cfoutput>">Link</a>.
Let me know if you find any of these useful.
In other news, this cracked me up.