先月までの忙しかったのの反動で,今日は一日中くてくてと.
相変わらず ColdFusion なわけですが. この言語,HTML に直接タグを埋め込む形式なわけで, HTML にスクリプトを埋め込む形式の PHP とどう違うかっつーと, CF タグと CF タグの間のホワイトスペースはそのまま valid な HTML として出力されてしまうところが大違い. 例えば変数ふたつに値を代入する文とか,
・ColdFusion <cfset var1 = "abc"> <cfset var2 = "def"> ・PHP <?php $var1 = 'abc'; $var2 = 'def'; ?>
...っとなるわけだが,CF の場合, この 1行目の > から 2行目の < までの「改行 + 行頭スペース」が, まるまるソースに残ってしまうわけだ. 世の中の大抵の CF サイトはこの問題を放置してるみたい. 試しに http://www.sirius.co.jp のソースを見てみるとわかる. これがどう問題なのかというと, ホワイトスペースに寛容な text/html とかを出してる分にはいいんだけど, CSV ファイルを出力しようなんて思うと大問題なんだな.
で,これを抑止するための <cfsetting enablecfoutputonly="Yes/No"> つータグがあって, これは <cfoutput> による出力以外の全ての出力を抑止するタグなのだな. これがあれば空白行問題は解決? えーっと...結論から言うと,微妙にダメ.
例えば cfZZZ とゆー CF タグがあったとすると, ソースにおいてその前後に文があった場合...
abc<cfZZZ>def
つまりここで cfZZZ タグで何らかの処理をしてソースから単純にタグを除去すると, 前後の abc と def はくっついちゃって abcdef とゆーひとつの単語になってしまう. たぶんこれを避けるためだと思うけど, タグは除去されるのではなく「ひとつのスペース」と置きかえられる. 結果,
abc def
...っとなるわけだ.そこで先ほどの <cfsetting> タグは, 「Yes と No で囲まれた範囲内の出力を抑止する」タグであるから, 出力の抑止はそのタグ自身には適用されない. よって,<cfsetting> 自身がひとつのスペースに置換されるのだ!
アホか,何だこの仕様! バーカバーカ!(笑)