かつ丼はおやつに入りますか?

コンピュータの話とか食べ物の話とか旅行とかいろいろ

ColdFusionでURL EncodeとURL Decode

はじめに

仕事でColdFusion(以下CF)を書くものの、自己学習でライセンス料を払いたくないためCF互換のLuceeを使って書いているがURLのエンコードとデコードの関数が怪しかったのでメモ。

encodeとdecodeの標準関数

以下が使用できる。ただし、urlEncode()はluceeでのみ実装された関数で、CFでは使えない。

  • urlEncode() ※luceeのみ実装
  • encodeForUrl()
  • urlDecode()
  • decodeFromUrl()

使い方

urlEncode()

<cfdump var="#urlEncode('testParam=日本語文字列')#">
<!--- test%3D%E6%97%A5%E6%9C%AC%E8%AA%9E --->

encodeForUrl()

<cfdump var="#encodeForUrl('testParam=日本語文字列')#">
<!--- test%3D%E6%97%A5%E6%9C%AC%E8%AA%9E --->

urlDecode()

<cfset encodedUrl = encodeForUrl("testParam=日本語文字列")>
<cfdump var="#urlDecode(encodedUrl)#">
<!--- test=日本語 --->

decodeFromUrl

<cfset encodedUrl = encodeForUrl("testParam=日本語文字列")>
<cfdump var="#decodeFromUrl(encodedUrl)#">
<!--- test=æ¥æ¬èª --->

日本語が文字化けする。

まとめ

エンコードに関してはurlEncode()の方がcharsetを指定できる上位互換だが、lucee独自の実装でCFでは使えない。互換性を優先するならurlEncode()は使わずにencodeForUrl()を使う。

デコードに関してはurlDecode()を使う。decodeFromUrl()は何のために実装されているのか、存在意義がわからない。

CFの標準関数の命名規約どうなってn...