17

ColdFusion が出力する空白を止める正しい方法は何ですか?

cfcontentとがあることを知っていcfsetting 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() です。結果は、ブラウザーに送信される 1 行の 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

または、ページ全体が変数内に格納され、このすべての処理が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>andを使用し<cfcomponent>ます (CF9 スクリプト スタイルを使用している場合のみ必要ありません)。これにより、多くの不要な空白が削除されます。

于 2010-02-16T02:17:02.667 に答える
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 をフォーマットするときに空白を追加します。

HTH

于 2010-02-11T11:54:23.333 に答える
0

サーバーにアクセスでき、すべてのページ要求にサーバーを実装したい場合は、trimflt.jar を検索してインストールします。これは、送信前にすべての空白と改行を削除する Java サーブレット フィルターです。jar を CF の /WEB-INF/lib ディレクトリーにドロップし、web.xml ファイルを編集してフィルターを追加します。コメントを削除したり、ファイルや拡張子を除外したり、特定の文字列を保持したりするように構成することもできます。数年間、問題なく実行しています。設定して忘れるソリューション。

于 2013-12-16T21:52:12.080 に答える