ColdFusion が出力する空白を止める正しい方法は何ですか?
cfcontent
とがあることを知っていcfsetting enableCFoutputOnly
ます。それを行う正しい方法は何ですか?
ColdFusion が出力する空白を止める正しい方法は何ですか?
cfcontent
とがあることを知っていcfsetting enableCFoutputOnly
ます。それを行う正しい方法は何ですか?
に加え<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>
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 を使用すると、帯域幅を大幅に削減できます。
どちら<cfsilent>
も<cfsetting enablecfoutputonly="yes">
満足できない場合は、おそらくこの問題を設計しすぎています。
審美的な理由だけで質問している場合、私の推奨事項は次のとおりです。空白は無視してください。害はありません。
または、ページ全体が変数内に格納され、このすべての処理がcfsilentタグ内で実行されるようにすることもできます。例えば
<cfsilent>
<!-- some coldfusion -->
<cfsavecontent variable="pageContent">
<html>
<!-- some content -->
</html>
</cfsavecontent>
<!-- reformat pageContent if required -->
</cfsilent><cfoutput>#pageContent#</cfoutput>
最後に、ページコンテンツを生成した後、出力する前に、追加の処理を実行できます。たとえば、正規表現を使用して、追加の空白やコードの整理を削除できます。
CFC を使用する場合のヒントを次に示します。
メソッドが出力を生成することを想定していない場合output="false"
は、in <cffunction>
andを使用し<cfcomponent>
ます (CF9 スクリプト スタイルを使用している場合のみ必要ありません)。これにより、多くの不要な空白が削除されます。
可能な限りあらゆる方法で空白を削除しても、コードに不要なスペースや改行が含まれている可能性があることがわかりました。これがまだ発生している場合は、目的の出力を得るために適切にフォーマットされたコードを犠牲にする必要があるかもしれません。
たとえば、次の代わりに:
<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
サーバーにアクセスでき、すべてのページ要求にサーバーを実装したい場合は、trimflt.jar を検索してインストールします。これは、送信前にすべての空白と改行を削除する Java サーブレット フィルターです。jar を CF の /WEB-INF/lib ディレクトリーにドロップし、web.xml ファイルを編集してフィルターを追加します。コメントを削除したり、ファイルや拡張子を除外したり、特定の文字列を保持したりするように構成することもできます。数年間、問題なく実行しています。設定して忘れるソリューション。