ColdFusionカフェテリア
SAMURAIZ
| ↑一覧へ戻る |
ColdFusionクリニックへようこそ

変数に入れる文字列にシャープ記号(#)を含んでいるとエラーがでるのですが

作成日: 2015年8月
最終更新日: 2015年8月

ColdFusionで変数を表示する際にシャープ文字を使用するので、それが影響してエラーになっているようですね。エラーメッセージを確認してみましょう。

エラー (無効な CFML construct)
<cfset MyCode="12345#67890">
<cfoutput>#MyCode#</cfoutput>
次の情報は、Web サイト開発者のデバッグに役立ちます。
リクエストを処理する際に、エラーが発生しました。

列 27、行 1 で、無効な CFML construct が見つかりました。

以下のテキストを見ていました :

/"

CFML コンパイラが処理中でした :

  • 列 21、行 1 から始まる式。
    終了の # が式にないようです。たとえば、#expr# ではなく #expr になっているようです。
  • 列 15、行 1 の /" で開始する式です。一般的に、式の構造内の問題がこのメッセージの原因です。
  • 列 2、行 1 から始まる cfset tag 。
エラーの発生位置C:/ColdFusion11/cfusion/wwwroot/local_link/variables/005_Variables_special_character.cfm: line 1
1 : <cfset MyCode="12345#67890">
2 : <cfoutput>#MyCode#</cfoutput>
スタックトレース
coldfusion.compiler.ParseException: 列 27、行 1 で、無効な CFML construct が見つかりました。
	at coldfusion.compiler.cfml40.ExpressionBody(cfml40.java:1016)
	at coldfusion.compiler.cfml40.StringPrimary(cfml40.java:6904)
	at coldfusion.compiler.cfml40.Literal(cfml40.java:6417)
	at coldfusion.compiler.cfml40.PrimaryExpression(cfml40.java:6310)
	at coldfusion.compiler.cfml40.UnaryExpression(cfml40.java:6165)
	at coldfusion.compiler.cfml40.ExponentialExpression(cfml40.java:6122)
	at coldfusion.compiler.cfml40.MultiplyDivisionExpression(cfml40.java:6075)
	at coldfusion.compiler.cfml40.IntegerDivisionExpression(cfml40.java:6056)
	at coldfusion.compiler.cfml40.ModExpression(cfml40.java:6037)
	at coldfusion.compiler.cfml40.AdditionExpression(cfml40.java:5990)
	at coldfusion.compiler.cfml40.ConcatExpression(cfml40.java:5971)
	at coldfusion.compiler.cfml40.ComparisonExpression(cfml40.java:5824)
	at coldfusion.compiler.cfml40.NotExpression(cfml40.java:5774)
	at coldfusion.compiler.cfml40.AndExpression(cfml40.java:5746)
	at coldfusion.compiler.cfml40.OrExpression(cfml40.java:5727)
	at coldfusion.compiler.cfml40.XorExpression(cfml40.java:5708)
	at coldfusion.compiler.cfml40.EqvExpression(cfml40.java:5689)
	at coldfusion.compiler.cfml40.ImpExpression(cfml40.java:5670)
	at coldfusion.compiler.cfml40.HookExpression(cfml40.java:5599)
	at coldfusion.compiler.cfml40.expr(cfml40.java:5583)
	at coldfusion.compiler.cfml40.cfScriptExpression(cfml40.java:2742)
	at coldfusion.compiler.cfml40.SimpleStatement(cfml40.java:625)
	at coldfusion.compiler.cfml40.cfsetstatement(cfml40.java:505)
	at coldfusion.compiler.cfml40.cfset(cfml40.java:477)
	at coldfusion.compiler.cfml40.cfml(cfml40.java:4726)
	at coldfusion.compiler.cfml40.start(cfml40.java:5178)
...

■検診の結果

エラーメッセージは以前も登場した、無効なCFML construct(構文)エラー。そして、メッセージに「終了の # が式にないようです。たとえば、#expr# ではなく #expr になっているようです。」のメッセージからも、シャープ記号が問題を発生する原因ですね。

今回の文字以外にも、二重引用符(")と一重引用符(')で同じような状況に遭遇する事があります。これら文字を利用する時は、エスケープ処理を行います。

■治療法は?

ColdFusionで #や"、' をエスケープするには同じ文字を2個入力します。エラーが発生している1行目のシャープ記号を使用している箇所で行って下さい

エラー回避方法
<cfset MyCode="12345##67890">

二重引用符や一重引用符は、エスケープしなくても済むように上手く組み合わせる(二重引用符の区切り内で一重引用符を使用する、あるいはその逆、など)事を検討しましょう。
特殊文字

■今後の予防

ColdFusionで、変数の値に #, ", ' を使う時には適切にエスケープすること(あるいはエスケープする必要があるかどうかの判断)を心がけて下さい。

また、文字列だけでなく、タグの属性に値をセットする場合にも同様にエスケープが必要な場合は検討して下さい。下記の<cfcookie>タグの例では、クッキーの有効期限を翌年1月1日にセットするため、DatePart関数を使用しています。タグの属性で二重引用符(")を使用し、DatePart関数で年を抜き出す箇所で一重引用符(')を使用しています。
<cfcookie name="cookie1" value="test" expires="1/1/#DatePart('yyyy',Now())+1#">

■おくすり出しておきますね〜(まめ知識)

 

タグや関数以外でも、エスケープ処理が必要となる箇所が出てきます。それは<cfoutput>〜</cfoutput>で囲む範囲です。<cfoutput>で囲む範囲の中でシャープ記号が使われるものとして、例えば、下記のようなHTMLを含む箇所を<cfoutput>〜</cfoutput>で囲んでいると、エラーが発生するのに気付きますでしょうか?

<cfoutput>
	<h3>マーケティング部</h3>
	<font color="#FF0000">企画課</font>
	#Varibles.LastName#さん
</cfoutput>
この場合の検討点は@かAのどちらかとなります。エスケープ処理を避ける事を優先するか、それともエスケープを行うか、、、みなさん次第です。
 @ <cfoutput>〜</cfoutput>で囲む範囲を見直す
 A <font color="##FF0000">とエスケープする
お大事に〜
ColdFusionの各種情報の配信


最新情報
■2017/6/26
『ColdFusion 実験室』
実験6

■2017/3/27
ColdFusion 2016 対応
インストール セットアップ情報
CFサーバーのインストール
CFビルダーのインストール

■2016/9/20
『ColdFusion 2016 リリース
Enterprise Edition 活用資料』
記事一覧

■2016/3/30
『ColdFusion 実験室』
実験4、実験5

■2015/8/10 〜
『ColdFusion クリニック』
記事一覧(随時更新中)

■2015/4/8
『JasperReportsによる帳票出力』
2. JasperReportsによる帳票出力【後編】

■2015/3/12
アップクロス株式会社
西元 貞昭様
『JasperReportsによる帳票出力』
1. JasperReportsによる帳票出力【前編】


■2015/2/25
『ColdFusionでエクセルを使いこなそう!』
4. 【上級】ColdFusionのエクセル機能を利用したPDF帳票の紹介

ColdFusionトレーニング


ColdFusionユーザーグループ
ColdFusionユーザーグループ
Copyright 2012 Samuraiz Corporation. All Rights Reserved.