我对函数的输出有一个非常奇怪的问题。我有一个用于清理用户输入的基本功能。当我尝试输出函数结果时,我得到的值前面带有空格。如果我将函数结果分配给变量,然后输出该变量,则不存在空格。这是我正在谈论的示例。想象有一个名为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在执行评估时出于某种未知原因而添加了空间。还有其他人遇到吗?如果需要,我可以先将所有结果分配给变量,但是我仍然想知道为什么会发生这种情况。
答案 0 :(得分:4)
简短答案
更改
<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"
,所以我不必为此担心。