CFML解析解密后字符串提取uid、email变量的实现方法
方案1:将参数存入结构体(推荐)
这种方式不会污染全局变量作用域,调用逻辑更清晰,也不会出现变量名冲突问题。
<cfset paramStruct = {} /> <cfset theUrl = dncrlink /> <cfloop list="#theUrl#" index="URLPiece" delimiters="&"> <cfset key = listFirst(urlPiece, "=") /> <cfset value = listLast(urlPiece, "=") /> <!--- 键值对存入结构体 ---> <cfset paramStruct[key] = value /> </cfloop> <!--- 后续调用示例 ---> <cfoutput> uid: #paramStruct.uid# <br> email: #paramStruct.email# </cfoutput>
方案2:直接创建独立变量
如果确实需要生成单独的可调用变量,可以使用动态变量名语法实现:
<cfset theUrl = dncrlink /> <cfloop list="#theUrl#" index="URLPiece" delimiters="&"> <cfset key = listFirst(urlPiece, "=") /> <cfset value = listLast(urlPiece, "=") /> <!--- 动态生成独立变量 ---> <cfset variables[key] = value /> <!--- 也可以用setVariable函数实现:<cfset setVariable(key, value) /> ---> </cfloop> <!--- 后续可以直接调用变量 ---> <cfoutput> uid: #uid# <br> email: #email# </cfoutput>
优化提示
如果你的参数值中可能包含=字符,用listFirst+listLast的写法会截断值内容,建议替换为更稳妥的截取写法:
<cfset eqPos = find("=", urlPiece) /> <cfset key = left(urlPiece, eqPos - 1) /> <cfset value = mid(urlPiece, eqPos + 1, len(urlPiece) - eqPos) />
内容的提问来源于stack exchange,提问作者Merle_the_Pearl
相关产品推荐
相关产品推荐

