encodeForHTML関数を利用していたらエラーと戦うことになったので…
CF11からHTMLEditFormat関数が非推奨となり、
encodeForHTML関数が推奨されるようになったようです。
しかしIIf関数を利用し、
かつ日本語を出力しようとすると下記のエラーメッセージが出力されてしまいます。
終了の # が式にないようです。たとえば、#expr# ではなく #expr になっているようです。
その対策方法についてですが、2点あります。
- 三項演算子を利用する
- HTMLEditFormatを使い続ける
1.三項演算子を利用する
IIf関数も非推奨になってきているらしく、三項演算子の利用を推奨しているようです。
DE関数と組み合わせて利用しなければいけませんでしたが、
どうやら三項演算子の場合はDE関数は不要で動的に式を評価してくれるようです。
<cfset testFlg = true> <cfset testString = '<b style="color:red;">あ有A</b>'> <cfoutput> <!--- エンコード結果出力 「あ有A」 ---> <cfdump var="#encodeforhtml(testString)#"> <br> <!--- 三項演算子使用時 出力結果:あ有A ---> #((testFlg IS true) ? encodeForHTML(testString) : "テスト")# <!--- iif関数使用時にはエラーとなる ---> <!--- 「#」が含まれている為、エラーになる ---> #IIf(testFlg IS true, DE(encodeForHTML(testString)), "テスト")# </cfoutput>
2.HTMLEditFormatを使い続ける
何だかんだでCF2016でもHTMLEditFormat関数は残っているので、
利用し続けるのも一つの手です。
ですが、最初に言った通りでCF11からセキリュティの問題で
encodeForHTML関数の利用を推奨しています。
結局のところ…
HTMLEditFormat関数が更新されるのを信じるか、
HTMLEditFormat関数が廃止されるかもしれないことを考えて先に対応しとくかは
色々と考えておかないといけませんね(:3_ヽ)_
ですが、encodeFor*関連の関数は複数存在しています。
※詳しい使い分けの方法についてはまだ知らないので、気が向いたら検証してみます…
関数名 | 説明 |
---|---|
encodeForHTMLAttribute | inputタグ内で利用する? |
encodeForCSS | CSS用 |
encodeForJavaScript | JavaScript用 |
encodeForURL | URLパラメータ用 |
encodeForXML | XML用 |
来年はCFとJavaの連携についての記事を充実にしていきたいです(:3_ヽ)_