为什么当我直接输出从 <cffunction> 返回的值时,Lucee 会在前导 space 字符前面加上如何停止它?
Why does Lucee prepend a leading space character when I directly output values returned from a <cffunction> and how do I stop it?
我在函数输出方面遇到了一个非常奇怪的问题。我有一个清理用户输入的基本功能。当我尝试输出函数结果时,我得到了带有 space 前缀的值。如果我将函数结果分配给一个变量然后输出该变量,则 space 不存在。这是我正在谈论的一个例子。假设有一个名为 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()函数returns3,打印结果的时候却显示四个字符。由于修剪函数仍然给我领先的 space,我觉得函数结果是正确的,并且 Lucee 在执行评估时出于某种未知原因添加了 space。还有其他人 运行 参与其中吗?如果需要,我可以先将所有结果分配给一个变量,但我仍然想知道为什么会这样。
简答
改变
<cffunction name="fn_SanitizeInput">
<cfargument name="arg">
<cfreturn arguments.arg>
</cffunction>
到
<cffunction name="fn_SanitizeInput" output="false">
<cfargument name="arg">
<cfreturn arguments.arg>
</cffunction>
更长的答案
space 是从哪里来的?
space是从<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"
这样我就不用担心了。
我在函数输出方面遇到了一个非常奇怪的问题。我有一个清理用户输入的基本功能。当我尝试输出函数结果时,我得到了带有 space 前缀的值。如果我将函数结果分配给一个变量然后输出该变量,则 space 不存在。这是我正在谈论的一个例子。假设有一个名为 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()函数returns3,打印结果的时候却显示四个字符。由于修剪函数仍然给我领先的 space,我觉得函数结果是正确的,并且 Lucee 在执行评估时出于某种未知原因添加了 space。还有其他人 运行 参与其中吗?如果需要,我可以先将所有结果分配给一个变量,但我仍然想知道为什么会这样。
简答
改变
<cffunction name="fn_SanitizeInput">
<cfargument name="arg">
<cfreturn arguments.arg>
</cffunction>
到
<cffunction name="fn_SanitizeInput" output="false">
<cfargument name="arg">
<cfreturn arguments.arg>
</cffunction>
更长的答案
space 是从哪里来的?
space是从<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"
这样我就不用担心了。