M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2009年10月 7日 21:19

escape()した文字列で焼いたCookieをjquery.cookie.jsで食べたら食あたり

このエントリーをはてなブックマークに追加 mixiチェック

Mac OS 9のMac IE 5.1対応ページをそろそろぶっちゃって、モダンブラウザ対応に作り変えようという案件。jQuery使って省力化を図ってやっているわけですけれども、Cookieでちょっとはまりました。

Mac IE 5.1の時代、そのブラウザには、encodeURI(), decodeURI() が実装されていなかったのです。decodeURI()は

M.C.P.C.: MacIE5でdecodeURIを実装

で実装できたものの、encodeURI() は根性がなくてできなかった。しかれば、JavaScript 1.0からある、escape() を使えばよくね? と思うのは自然の摂理。Cookieにescape()でパーセントエンコーディングした文字列を格納し、必要なときにCookieから読み込んだパーセントエンコーディング文字列をenescape() すれば元に戻っていた。それで今まで問題なかったんですよね。

ここで、escape()、unescape() はブラウザごとに挙動違うから encodeURI()、decodeURI() のほうがいいんじゃないの?ていう人がいると思うんですが、

  • Cookie焼くときも食べるときも同じブラウザ使うだろ

という1点で論破。

そんで、今回jquery.cookie.jsプラグインの$.cookie() を使ってみたらば、こいつ、読み込み時は内部でdecodeURI() でデコードしているので、URIError: malformed URI sequence JavaScriptなんてエラーが出るわけです。口に合わないCookieを食べてしまったので、$.cookie() が食あたりを起こしている状態。

しょうがないので、try...catchを使って、$.cookie() がエラーを起こした場合は、生Cookieを読み込んで自前でunescape() する小ルーチンを作ることになりました。

Cookieに日本語文字列を生で入れるな、というのはまあわかります。

投稿 大野 義貴 [Web] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/2998

コメントする