escape()した文字列で焼いたCookieをjquery.cookie.jsで食べたら食あたり
スポンサードリンク
Mac OS 9のMac IE 5.1対応ページをそろそろぶっちゃって、モダンブラウザ対応に作り変えようという案件。jQuery使って省力化を図ってやっているわけですけれども、Cookieでちょっとはまりました。
Mac IE 5.1の時代、そのブラウザには、encodeURI(), decodeURI() が実装されていなかったのです。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に日本語文字列を生で入れるな、というのはまあわかります。
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/2998
コメントする