【发布时间】:2011-01-15 13:29:09
【问题描述】:
停止 ColdFusion 输出的空白的正确方法是什么?
我知道有cfcontent 和cfsetting enableCFoutputOnly。这样做的正确方法是什么?
【问题讨论】:
-
您要解决的问题是什么?额外的空白本身并没有造成真正的伤害,至少我不知道。
标签: coldfusion whitespace cfml
停止 ColdFusion 输出的空白的正确方法是什么?
我知道有cfcontent 和cfsetting enableCFoutputOnly。这样做的正确方法是什么?
【问题讨论】:
标签: coldfusion whitespace cfml
【讨论】:
edit 在旧 cmets 上不可用。
如果<cfsilent> 和<cfsetting enablecfoutputonly="yes"> 都不能满足你,那么你可能过度设计了这个问题。
当您仅出于审美原因而询问时,我的建议是:忽略空格,它不会造成任何伤害。
【讨论】:
我发现即使使用所有可能的方法来消除空格,您的代码仍可能有一些不需要的空格或换行符。如果您仍然遇到这种情况,您可能需要牺牲格式良好的代码以获得所需的输出。
例如,而不是:
<cfprocessingdirective suppressWhiteSpace = "true">
<cfquery ...>
...
...
...
</cfquery>
<cfoutput>
Welcome to the site #query.userName#
</cfoutput>
</cfprocessingdirective>
您可能需要编码:
<cfprocessingdirective suppressWhiteSpace = "true"><cfquery ...>
...
...
...
</cfquery><cfoutput>Welcome to the site #query.UserName#</cfoutput></cfprocessingdirective>
这不是 CF 添加空格,而是在格式化 CF 时添加空格。
HTH
【讨论】:
您可以通过访问 ColdFusion 输出缓冲区来修改 ColdFusion 输出。 James Brown 最近在我们的用户组会议 (Central Florida Web Developers User Group) 上演示了这个。
<cfscript>
out = getPageContext().getOut().getString();
newOutput = REreplace(out, 'regex', '', 'all');
</cfscript>
在 Application.cfc onRequestEnd() 中执行此操作的好地方。您的结果可能是一行 HTML,然后将其发送到浏览器。将您的 Web 服务器与 GZip 一起使用,您将大大减少带宽。
【讨论】:
或者,您可以确保将整个页面存储在一个变量中,并且所有这些处理都在 cfsilent 标记中完成。例如
<cfsilent>
<!-- some coldfusion -->
<cfsavecontent variable="pageContent">
<html>
<!-- some content -->
</html>
</cfsavecontent>
<!-- reformat pageContent if required -->
</cfsilent><cfoutput>#pageContent#</cfoutput>
最后,您可以在生成页面内容之后但在输出之前执行任何其他处理,例如一个正则表达式,用于删除额外的空格或一些代码整理。
【讨论】:
如果您使用 CFC,这里有一个提示。
如果您不希望您的方法生成任何输出,请在 <cffunction> 和 <cfcomponent> 中使用 output="false"(仅当您使用 CF9 脚本样式时才需要)。这将消除很多不需要的空格。
【讨论】:
除了<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 文档的“Prolog 中不允许内容”错误。
如果您从函数中得到不需要的空格,请使用 output-attribute 来抑制任何输出并将结果作为字符串返回 - 例如:
<cffunction name="getMyName" access="public" returntype="string" output="no">
<cfreturn "Seybsen" />
</cffunction>
【讨论】:
(<cfcontent reset="yes" ...) 也适用于 OpenBlueDragon (OpenBD)。
如果您可以访问服务器并希望在每个页面请求上实现它,请搜索并安装 trimflt.jar。这是一个 Java servlet 过滤器,可以在发送之前删除所有空格和换行符。将 jar 放入 CF 的 /WEB-INF/lib 目录并编辑 web.xml 文件以添加过滤器。它还可以配置为删除 cmets、排除文件或扩展名以及保留特定字符串。运行了几年没有问题。设置它并忘记它的解决方案。
【讨论】: