Skip to content

Instantly share code, notes, and snippets.

@spillsthrills
Last active December 9, 2021 05:33
Show Gist options
  • Save spillsthrills/be05b30425b342f7d47e518f33eb52fe to your computer and use it in GitHub Desktop.
Save spillsthrills/be05b30425b342f7d47e518f33eb52fe to your computer and use it in GitHub Desktop.
<cfscript>
public struct function queryStringToStruct(
required string urlString,
boolean preserveEmptyKeys = true,
boolean decodeValues = false
){
var emptyKeyValBool = arguments.preserveEmptyKeys;
var decodeURLValues = arguments.decodeValues;
var queryStr = reReplace(arguments.urlString,"^\?","");
var queryParamStruct = {};
var queryStrArr = listToArray(queryStr,"&",true);
if ( arrayisEmpty(queryStrArr) ) {
throw("Empty or invalid query string.");
}
try{
queryStrArr.each(function(qParam, qIdx) {
tempStruct = {};
tempArr = listToArray(qParam,"=", true);
if ( emptyKeyValBool ) {
tempStruct[tempArr[1]] = tempArr[2];
} else if( tempArr[2].len() && !emptyKeyValBool ) {
tempStruct[tempArr[1]] = tempArr[2];
}
if ( decodeURLValues && tempArr[2].len() ) {
tempStruct[tempArr[1]] = decodeFromURL(tempArr[2]);
}
queryParamStruct.append(tempStruct, true);
});
}catch(any excpt) {
//log etc.....
}
finally{
return queryParamStruct;
}
}
/* Tests */
writedump(parseQueryStringAsStruct(""));
writedump(parseQueryStringAsStruct("?qsParam1=tjjjj&qsParam2=lllll&qsParamempty=",true));
writedump(parseQueryStringAsStruct("?qsParam1=tjjjj&qsParamempty=&qsParam2=lllll",true));
writedump(parseQueryStringAsStruct("?qsParam1=tjjjj&qsParam2=lllll&qsParamempty=",false));
writedump(parseQueryStringAsStruct("?qsParam1=tjjjj&qsParam2=lllll&qsParamempty=&qsParamEncoced=%28my%20val%20in%20parens%29",false));
writedump(parseQueryStringAsStruct("?qsParam1=tjjjj&qsParam2=lllll&qsParamempty=&qsParamEncoced=%28my%20val%20in%20parens%29",false,true));
writedump(parseQueryStringAsStruct("?qsParam1=tjjjj&qsParam2=lllll&qsParamempty=&qsParamEncoced=%28my%20val%20in%20parens%29",true,true));
</cfscript>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment