17

停止 ColdFusion 输出的空白的正确方法是什么?

我知道有cfcontentcfsetting enableCFoutputOnly。这样做的正确方法是什么?

4

8 回答 8

12

除了<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>
于 2011-10-08T07:38:30.317 回答
6

您可以通过访问 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 一起使用,您将大大减少带宽。

于 2010-02-11T17:23:57.550 回答
4

在标签方面,有cfsilent

在管理员中有一个“启用空白管理”的设置

进一步阅读 cfsilent 和 cfcontent 重置。

于 2010-02-11T03:28:55.520 回答
1

如果两者<cfsilent><cfsetting enablecfoutputonly="yes">不能满足你,那么你可能过度设计了这个问题。

当您仅出于审美原因询问时,我的建议是:忽略空格,它不会造成任何伤害。

于 2010-02-11T10:34:54.267 回答
0

我发现即使使用所有可能的方法来消除空格,您的代码仍然可能有一些不需要的空格或换行符。如果您仍然遇到这种情况,您可能需要牺牲格式良好的代码以获得所需的输出。

例如,而不是:

<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 时添加空格。

高温高压

于 2010-02-11T11:54:23.333 回答
0

如果您有权访问服务器并希望在每个页面请求上实现它,请搜索并安装 trimflt.jar。这是一个 Java servlet 过滤器,可以在发送之前删除所有空格和换行符。将 jar 放入 CF 的 /WEB-INF/lib 目录并编辑 web.xml 文件以添加过滤器。它还可以配置为删除注释、排除文件或扩展名以及保留特定字符串。运行了几年没有问题。设置它并忘记它的解决方案。

于 2013-12-16T21:52:12.080 回答
0

或者,您可以确保将整个页面存储在一个变量中,并且所有这些处理都在 cfsilent 标记中完成。例如

<cfsilent>
    <!-- some coldfusion -->
    <cfsavecontent variable="pageContent">
        <html>
            <!-- some content -->
        </html>
    </cfsavecontent>
    <!-- reformat pageContent if required -->
</cfsilent><cfoutput>#pageContent#</cfoutput>

最后,您可以在生成页面内容之后但在输出之前执行任何其他处理,例如,使用正则表达式来删除额外的空白或一些代码整理。

于 2010-02-11T22:57:01.447 回答
0

如果您使用 CFC,这里有一个提示。

如果您不希望您的方法生成任何输出,请使用output="false"in<cffunction><cfcomponent>(仅当您使用 CF9 脚本样式时才需要)。这将消除很多不需要的空格。

于 2010-02-16T02:17:02.667 回答