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);
3つの選択肢があります。
escape()
はエンコードしません。@*/+
encodeURI()
はエンコードされません。~!@#$&*()=:/,;?+'
encodeURIComponent()
はエンコードされません。~!*()'
しかし、あなたのケースでは、他のページの GET
パラメータに URL を渡したい場合、escape
や encodeURIComponent
を使うべきで、encodeURI
は使うべきではありません。
詳しくはStack Overflowの質問Best practice: escape, or encodeURI / encodeURIComponentを参照してください。
encodeURIComponent()
を使ってください。関数encodeURI()
は、URLにおいて意味的に重要な多くの文字(例えば、「#」、「?」、「&」)をわざわざエンコードしません。また、escape()
は非推奨であり、サーバ上でエンコードされたスペースとして解釈される「+」文字をわざわざエンコードしません(また、ここで他の人が指摘しているように、非ASCII文字を適切にURLエンコードしません)。
別の場所に良いencodeURI()と
encodeURIComponent()`の違いについての説明があります。何かをエンコードして、それをURIのコンポーネントとして安全に含めることができるようにしたい場合(例えば、クエリ文字列のパラメータとして)、encodeURIComponent()
を使用したいと思います。