函数的输出有一个非常奇怪的问题。我有一个对用户输入进行消毒的基本功能。当我试图输出函数结果时,我会得到一个空格加在前面的值。如果我将函数结果赋值给一个变量,然后输出该变量,空间就不存在。这是我说的一个例子。假设有一个名为fn_SanitizeInput()的函数。
<cfset var_UserInput = "foo">
<cfset var_SanitizedUserInput = fn_SanitizeInput(var_UserInput)> // foo
<cfoutput>
Input Length: #len(var_UserInput)# // 3
Sanitized Input Length:
#len(fn_SanitizeInput(var_UserInput))# // 3
#len(var_SanitizedUserInput)# // 3
Function Output: |#fn_SanitizeInput(var_UserInput)#| // | foo|
Trimmed Function Output: |#trim(fn_SanitizeInput(var_UserInput))#| // | foo|
Var Output: |#var_SanitizedUserInput#| // |foo|
</cfoutput>我不明白为什么len()函数返回3,但是在打印结果时会显示四个字符。由于修整函数仍然给了我主导的空间,我觉得函数的结果是正确的,Lucee在执行评估时由于一些未知的原因而添加了这个空间。还有其他人碰到这个吗?如果需要,我可以先将所有结果赋值给一个变量,但我仍然想知道为什么会发生这种情况。
发布于 2019-11-13 02:25:18
短答案
变化
<cffunction name="fn_SanitizeInput">
<cfargument name="arg">
<cfreturn arguments.arg>
</cffunction>至
<cffunction name="fn_SanitizeInput" output="false">
<cfargument name="arg">
<cfreturn arguments.arg>
</cffunction>更长的答案
空间是从哪里来的?
空格从<argument>标记的末尾到<cfreturn>标记的开始。如果你真的想,你可以
<cffunction name="fn_SanitizeInput"><cfargument name="arg"><cfreturn arguments.arg></cffunction>您编写的代码可能如下所示:
#len(fn_SanitizeInput(var_UserInput))#但实际上,它是这样的:
<cfsavecontent var="result">#fn_SanitizeInput(var_UserInput)#</cfsavecontent>
#len(result)#一些的社论
我真的希望cfml函数的默认输出模式是静默的,但遗憾的是,事实并非如此。为了我自己的理智,我设置了output="false",这样我就不用担心了。
https://stackoverflow.com/questions/58827551
复制相似问题