什么是停止ColdFusion输出的空白区域的正确方法?White Space/Coldfusion
我知道有cfcontent
和cfsetting enableCFoutputOnly
。什么是正确的方法来做到这一点?
什么是停止ColdFusion输出的空白区域的正确方法?White Space/Coldfusion
我知道有cfcontent
和cfsetting enableCFoutputOnly
。什么是正确的方法来做到这一点?
如果没有<cfsilent>
也<cfsetting enablecfoutputonly="yes">
能满足你,那么你是可能过度设计这个问题。
当您完全出于美学原因而提出要求时,我的建议是:忽略空白,不会造成任何伤害。
空白是比干净的代码更多的问题。 doctype之前的空格会导致验证错误。看似美观,但如果你的客户想要/需要有效的网站,这实际上是一个问题。纯文本Web服务返回之前或之后的空白也会造成不便。在XML返回中导致空白可能导致错误,例如“在prolog中不允许的内容”。这两个结果都需要用户操作结果才能使用。在我看来,这是一个sl web的网络服务。 – Travis 2010-02-11 11:47:22
@ Travis:是的,的确如此。尽管如此,这些特定的问题可以通过现有的方法完美解决。混合CF和HTML导致的空白问题远不是一个问题,可以单独使用,恕我直言。 – Tomalak 2010-02-11 11:56:50
在大多数情况下,我同意它可以被忽略。 Howerver,我有几个坚持严格验证的客户(有趣的一面是,即使他的最新网站看起来像1991年的东西)。尝试这样做时,空白会造成严重破坏;不只是在文档类型之前,而是遍布整个文档。其中大部分不是因为CF,而是因为编码人员在代码中存在空格,请参阅我对答案的贡献。 – Travis 2010-02-11 12:15:53
我发现,即使使用各种可能的方法来消除空白,您的代码仍可能有一些不需要的空格或换行符。如果您仍然遇到这种情况,您可能需要为预期输出牺牲良好的代码。
,而不是例如:
<cfprocessingdirective supressWhiteSpace = "true">
<cfquery ...>
...
...
...
</cfquery>
<cfoutput>
Welcome to the site #query.userName#
</cfoutput>
</cfprocessingdirective>
您可能需要代码:
<cfprocessingdirective supressWhiteSpace = "true"><cfquery ...>
...
...
...
</cfquery><cfoutput>Welcome to the site #query.UserName#</cfoutput></cfprocessingdirective>
这不是CF加入空格,但是格式化你的CF.当你添加空格
HTH
哦,我的。可读性和易于理解的格式良好的代码必须比HTML输出代码中的某些额外空白更重要。现在来吧。 – Jay 2010-02-12 13:33:38
查看Tomalak的回答。在大多数情况下,是的,但绝对不是必需的,Jay。这是一个可行的解决方案,当空白会弄糟你的系统,CF不处理你输入的空白。 doctype之前的空白将导致验证错误。看似美观,但如果你的客户想要/需要有效的网站,这实际上是一个问题。纯文本Web服务返回之前或之后的空白也会造成不便。在XML返回中导致空白可能导致错误,例如“在prolog中不允许的内容”。 – Travis 2010-02-12 18:54:40
您可以通过获取接入到ColdFusion Outpout缓冲区修改ColdFusion的输出。 James Brown最近在我们的用户组会议上演示了这个(Central Florida Web Developers User Group)。
<cfscript>
out = getPageContext().getOut().getString();
newOutput = REreplace(out, 'regex', '', 'all');
</cfscript>
一个很好的做法是在Application.cfc onRequestEnd()。您的结果可能是一行HTML,然后发送到浏览器。与您的网络服务器一起使用GZip,您将大大减少带宽。
或者,您可以确保您的整个页面存储在一个变量中,并且所有这些处理均在cfsilent标记中完成。例如
<cfsilent>
<!-- some coldfusion -->
<cfsavecontent variable="pageContent">
<html>
<!-- some content -->
</html>
</cfsavecontent>
<!-- reformat pageContent if required -->
</cfsilent><cfoutput>#pageContent#</cfoutput>
最后,您可以在生成pagecontent之后但在输出它之前执行任何其他处理,例如,一个正则表达式来删除额外的空白或一些代码整理。
如果您使用CFC,这里有一个提示。
如果你不希望你的方法生成任何输出,(仅当你使用CF9脚本风格并不需要)在<cffunction>
和<cfcomponent>
使用output="false"
。这将消除很多不需要的空格。
除了<cfsilent>
,<cfsetting enablecfoutputonly="yes">
和<cfprocessingdirective suppressWhiteSpace = "true">
是<cfcontent reset="true" />
。您可以使用它删除文档开头的空格。然后
HTML5文件应该像这样开头:
<cfcontent type="text/html; charset=utf-8" reset="true" /><!doctype html>
XML文档:
<cfcontent reset="yes" type="text/xml; charset=utf-8" /><CFOUTPUT>#VariableHoldingXmlDocAsString#</CFOUTPUT>
这样,您将无法获得 - 错误的XML文档“内容没有在序言中不允许” 。
如果从一个功能越来越不需要的空格使用output
-attribute压制任何输出,并返回你的结果作为字符串 - 例如:
<cffunction name="getMyName" access="public" returntype="string" output="no">
<cfreturn "Seybsen" />
</cffunction>
如果您可以访问到服务器,并希望实现它会在每个页面请求中搜索并安装trimflt.jar。这是一个Java servlet过滤器,在发送它之前将删除所有空白和换行符。将jar放入CF的/ WEB-INF/lib目录中并编辑web.xml文件以添加过滤器。它的配置也可以删除注释,排除文件或扩展名,并保留特定的字符串。已经运行了几年没有问题。设置它并忘记它的解决方案。
你试图解决什么问题?额外的空白空间本身并不会造成真正的伤害,至少不是我所知道的。 – Jay 2010-02-11 13:36:51