JavaScriptでURLをエンコードするには?

JavaScriptを使ってURLを安全にエンコードして、GET文字列に入れるにはどうすればいいですか?

var myUrl = "http://example.com/index.html?param=1&anotherParam=2";
var myOtherUrl = "http://example.com/index.html?url=" + myUrl;

2行目の myUrl 変数をエンコードする必要があるのではないでしょうか?

ソリューション

組み込み関数のencodeURIComponent(str)encodeURI(str)をご覧ください。
あなたのケースでは、これでうまくいくはずです。

var myOtherUrl = 
       "http://example.com/index.html?url=" + encodeURIComponent(myUrl);
解説 (9)

3つの選択肢があります。

  • escape() はエンコードしません。@*/+

  • encodeURI() はエンコードされません。~!@#$&*()=:/,;?+'

  • encodeURIComponent() はエンコードされません。~!*()'

しかし、あなたのケースでは、他のページの GET パラメータに URL を渡したい場合、escapeencodeURIComponent を使うべきで、encodeURI は使うべきではありません。

詳しくはStack Overflowの質問Best practice: escape, or encodeURI / encodeURIComponentを参照してください。

解説 (10)

encodeURIComponent()を使ってください。関数encodeURI()は、URLにおいて意味的に重要な多くの文字(例えば、「#」、「?」、「&」)をわざわざエンコードしません。また、escape()は非推奨であり、サーバ上でエンコードされたスペースとして解釈される「+」文字をわざわざエンコードしません(また、ここで他の人が指摘しているように、非ASCII文字を適切にURLエンコードしません)。

別の場所に良いencodeURI()encodeURIComponent()`の違いについての説明があります。何かをエンコードして、それをURIのコンポーネントとして安全に含めることができるようにしたい場合(例えば、クエリ文字列のパラメータとして)、encodeURIComponent()を使用したいと思います。

解説 (0)