前々回、URLエンコードについて調べましたが、encodeURIをつかったとしても、
- _ . ! ~ * ' ( )
はエンコードされないことがわかりました。
これらのうち、
! * ' ( )
はURLに予約されている文字になったため、
これらの文字を含めてエスケープしたい場合は、
function fixedEncodeURIComponent (str) { return encodeURIComponent(str).replace(/[!'()]/g, escape).replace(/\*/g, "%2A"); }
的な関数をつくってつかうと良いらしいです。