Coldfusion 空白/冷融合
停止ColdFusion输出的空白的正确方法是什么Coldfusion 空白/冷融合,coldfusion,whitespace,cfml,Coldfusion,Whitespace,Cfml,停止ColdFusion输出的空白的正确方法是什么 我知道有cfcontent和cfsetting启用cfoutputOnly。正确的方法是什么?就标签而言,有两种方法 在administrator中有一个“启用空白管理”的设置 如果和都不能满足您的要求,那么您可能对这个问题设计过度了 当您纯粹出于美观考虑而提问时,我的建议是:忽略空格,它不会造成任何伤害。我发现,即使使用各种可能的方法来消除空格,您的代码仍可能有一些不需要的空格或换行符。如果您仍然遇到这种情况,您可能需要牺牲格式良好的代码来获
我知道有
cfcontent
和cfsetting启用cfoutputOnly
。正确的方法是什么?就标签而言,有两种方法
在administrator中有一个“启用空白管理”的设置
如果
和
都不能满足您的要求,那么您可能对这个问题设计过度了
当您纯粹出于美观考虑而提问时,我的建议是:忽略空格,它不会造成任何伤害。我发现,即使使用各种可能的方法来消除空格,您的代码仍可能有一些不需要的空格或换行符。如果您仍然遇到这种情况,您可能需要牺牲格式良好的代码来获得所需的输出 例如,而不是:
<cfprocessingdirective suppressWhiteSpace = "true">
<cfquery ...>
...
...
...
</cfquery>
<cfoutput>
Welcome to the site #query.userName#
</cfoutput>
</cfprocessingdirective>
...
...
...
欢迎访问网站#query.userName#
您可能需要编写以下代码:
<cfprocessingdirective suppressWhiteSpace = "true"><cfquery ...>
...
...
...
</cfquery><cfoutput>Welcome to the site #query.UserName#</cfoutput></cfprocessingdirective>
...
...
...
欢迎访问网站#query.UserName#
这不是CF添加空白,而是在格式化CF时添加空白
HTH您可以通过访问ColdFusion输出缓冲区来修改ColdFusion输出。最近在我们的用户组会议()上演示了这一点
out=getPageContext().getOut().getString();
newOutput=REreplace(out,'regex','all');
执行此操作的最佳位置是Application.cfc onRequestEnd()。您的结果可能是一行HTML,然后发送到浏览器。使用您的web服务器进行GZip,您将大大减少带宽。或者,您可以确保您的整个页面存储在一个变量中,并且所有这些处理都在cfsilent标记中完成。e、 g
<cfsilent>
<!-- some coldfusion -->
<cfsavecontent variable="pageContent">
<html>
<!-- some content -->
</html>
</cfsavecontent>
<!-- reformat pageContent if required -->
</cfsilent><cfoutput>#pageContent#</cfoutput>
#页面内容#
最后,您可以在生成页面内容后但在输出之前执行任何附加处理,例如,使用正则表达式删除附加空白或某些代码整理。如果使用CFC,这里有一个提示 如果您不希望您的方法生成任何输出,请在
和
中使用output=“false”
(仅当您使用CF9脚本样式时不需要)。这将消除许多不需要的空白。除了
,
和
是
。您可以使用它删除文档开头的空白
HTML5文档将以如下方式开始:
<cfcontent type="text/html; charset=utf-8" reset="true" /><!doctype html>
如果您有权访问服务器,并且希望在每个页面上实现它,请搜索并安装trimflt.jar。它是一个JavaServlet过滤器,在发送之前会删除所有空格和换行符。将jar放到CF的/WEB-INF/lib目录中,编辑WEB.xml文件以添加过滤器。它还可以配置为删除注释、排除文件或扩展名以及保留特定字符串。已经运行了几年,没有任何问题。一个定下来就忘了的解决方案 同样,还有tagand@Travis-应该是“即用2p抑制”s@NicCottrell谢谢你纠正了一个5岁的o型。不幸的是,
edit
在旧的注释中不可用。空白比修改干净的代码更麻烦。doctype前的空格将导致验证错误。表面上看起来很美观,但如果你的客户想要/需要有效的站点,实际上这是一个问题。纯文本web服务返回之前或之后的空白也会造成不便。XML返回中的前导空格可能会导致错误,例如“prolog中不允许的内容”。这两种结果都要求用户操作结果以使其可用。在我看来,这是一个草率的网络服务。@Travis:是的,没错。尽管如此,这些特殊问题仍然可以用可用的方法完美地解决。混合使用CF和HTML所产生的空白问题要小得多,可以忽略,IMHO。在大多数情况下,我同意可以忽略它。然而,我有一些客户坚持严格验证(有趣的是,即使是他的最新网站看起来也像是1991年的)。当试图这样做时,空格会造成严重破坏;不仅在doctype之前,而且在整个文档中。大部分不是因为CF,而是因为编码者的代码中有空格,请参阅我对答案的贡献。您试图解决的问题是什么?额外的空白本身并没有造成真正的伤害,至少据我所知是这样。与HTML输出代码中的一些额外空白相比,具有可读性和易于理解的良好格式的代码必须更加重要。来吧,看看托马拉克回答中的评论。在大多数情况下是的,但不是绝对需要的时候,杰。这是一个可行的解决方案,当空白将弄糟您的系统,CF不处理您输入的空白。doctype前的空格将导致验证错误。表面上看起来很美观,但如果你的客户想要/需要有效的站点,实际上这是一个问题。纯文本web服务返回之前或之后的空白也会造成不便。XML返回中的前导空格可能会导致错误,例如“prolog中不允许内容”。这(
<cfcontent type="text/html; charset=utf-8" reset="true" /><!doctype html>
<cfcontent reset="yes" type="text/xml; charset=utf-8" /><CFOUTPUT>#VariableHoldingXmlDocAsString#</CFOUTPUT>
<cffunction name="getMyName" access="public" returntype="string" output="no">
<cfreturn "Seybsen" />
</cffunction>