Skip to content

Instantly share code, notes, and snippets.

@spillsthrills
Last active April 25, 2020 23:46
Show Gist options
  • Save spillsthrills/0d7a8a4c6ca3758db17f8e922ff1cff1 to your computer and use it in GitHub Desktop.
Save spillsthrills/0d7a8a4c6ca3758db17f8e922ff1cff1 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(queryStringToStruct(""));
writedump(queryStringToStruct("?qsParam1=tjjjj&qsParam2=lllll&qsParamempty=",true));
writedump(queryStringToStruct("?qsParam1=tjjjj&qsParamempty=&qsParam2=lllll",true));
writedump(queryStringToStruct("?qsParam1=tjjjj&qsParam2=lllll&qsParamempty=",false));
writedump(queryStringToStruct("?qsParam1=tjjjj&qsParam2=lllll&qsParamempty=&qsParamEncoced=%28my%20val%20in%20parens%29",false));
writedump(queryStringToStruct("?qsParam1=tjjjj&qsParam2=lllll&qsParamempty=&qsParamEncoced=%28my%20val%20in%20parens%29",false,true));</cfscript>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment