JavaScriptでURI encodeする。

半年位前に書いて放置してた...

URI encodeとは

URI(URL)には使えない記号や文字を変換し使える形式にするというもの。
このURI encodeに使えそうなものとして、escape()、encodeURI()、encodeURIComponent()の3つの関数がある。
これらの関数を見ていく。

escape()

escape()は仕様が不明確であった為、ブラウザやバージョンにより異なる実装がなされた。
それで、ECMAScript v3から、非推奨とされているらしいので、使わないほうがいい。
msdnでも非推奨とされている。
http://msdn.microsoft.com/ja-jp/library/9yzah1fh(v=vs.94).aspx

encodeURI()

URIにおいて特別な意味を持つ予約文字(/, :, &, +, =)はencodeしないので、
encodeURI()はURIとして動いて欲しい文字列に対して使える。

encodeURI("http://www.google.com/a file with spaces.html")
// http://www.google.com/a%20file%20with%20spaces.html

encodeURIComponent()

予約文字(/, :, &, +, =)もencodeするので、encodeURIComponent()はqueryとして使いたい文字列に対して使える。

param1 = encodeURIComponent("http://xyz.com/?a=12&b=55")

url = "http://domain.com/?param1=" + param1 + "&param2=99";
// http://www.domain.com/?param1=http%3A%2F%2Fxyz.com%2F%Ffa%3D12%26b%3D55&param2=99

まとめ

URIとして動いて欲しい文字列に対しては encodeURI()を、queryとして使いたい文字列に対しては encdeURIComponent()を使いましょう。