停止ColdFusion输出的空白区域的正确方法是什么?
我知道有cfcontent
和cfsetting enableCFoutputOnly
。这样做的正确方法是什么?
答案 0 :(得分:11)
除<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>
这样你就不会得到“prolog中不允许内容” - XML文档的错误。
如果从函数中获得不需要的空格,请使用output
- 属性来禁止任何输出并将结果作为字符串返回 - 例如:
<cffunction name="getMyName" access="public" returntype="string" output="no">
<cfreturn "Seybsen" />
</cffunction>
答案 1 :(得分:5)
您可以通过访问ColdFusion Outpout Buffer来修改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,您将大量削减带宽。
答案 2 :(得分:4)
答案 3 :(得分:1)
如果<cfsilent>
和<cfsetting enablecfoutputonly="yes">
都不能满足您的要求,那么您可能会过度设计此问题。
当你仅仅出于美学原因提出要求时,我的建议是:忽略空白,它不会造成任何伤害。
答案 4 :(得分:0)
我发现即使使用所有可能的方法来消除空格,您的代码仍可能有一些不需要的空格或换行符。如果你仍然遇到这种情况,你可能需要牺牲格式良好的代码来获得所需的输出。
例如,,而不是:
<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
答案 5 :(得分:0)
或者,您可以确保整个页面存储在变量中,所有这些处理都在cfsilent标记内完成。 e.g。
<cfsilent>
<!-- some coldfusion -->
<cfsavecontent variable="pageContent">
<html>
<!-- some content -->
</html>
</cfsavecontent>
<!-- reformat pageContent if required -->
</cfsilent><cfoutput>#pageContent#</cfoutput>
最后,您可以在生成页面内容之后但在输出页面内容之前执行任何其他处理,例如一个正则表达式,用于删除额外的空格或一些代码整理。
答案 6 :(得分:0)
如果你使用CFC,这是一个提示。
如果您不希望自己的方法生成任何输出,请使用output="false"
和<cffunction>
中的<cfcomponent>
(仅当您使用的是CF9脚本样式时才需要)。这将消除许多不需要的空白。
答案 7 :(得分:0)
如果您有权访问服务器并希望在每个页面请求上实现它,请搜索并安装trimflt.jar。它是一个Java servlet过滤器,它会在发送之前删除所有空格和换行符。将jar放在CF的/ WEB-INF / lib目录中,然后编辑web.xml文件以添加过滤器。它还可以配置以删除注释,排除文件或扩展名,以及保留特定字符串。已经运行了几年没有问题。设置它并忘记解决方案。