クエリ文字列をエンコードする場合は、encodeURIComponent
. 理由は簡単です。他のいくつかの文字の中で、スラッシュとアマサンドをエンコードしますが、エンコードしencodeURI
ません。
エンコードURIコンポーネント
使用は何ですか?URL をエンコードしてクエリ文字列に渡したいとします。これにより、すべての文字をエンコードできるため、次のようになります。
encodeURIComponent('http://abc.com/my page.html?name=bob&foo=bar')
結果を得るために
"http%3A%2F%2Fabc.com%2Fmy%20page.html%3Fname%3Dbob%26foo%3Dbar"
次のように、クエリ文字列として安全に渡すことができます。
http://mysite.com/foo=http%3A%2F%2Fabc.com%2Fmy%20page.html%3Fname%3Dbob%26foo%3Dbar
両方の URL にクエリ文字列パラメーターfoo
があることに注意してください。ただし、エンコードされた URL にはエンコードされているため、問題ありません。全体のfoo
パラメータは
http%3A%2F%2Fabc.com%2Fmy%20page.html%3Fname%3Dbob%26foo%3Dbar
foo=bar
エンコードされた 2 番目の URLとの競合はありません。
エンコードURI
ここで、既にある完全な URL をエンコードする場合は、encodeURI
.
encodeURI('http://abc.com/my page.html?name=bob&foo=bar')
あげます
"http://abc.com/my%20page.html?name=bob&foo=bar"
これにより、URL が有効に保たれ、この例ではスペースのみがエンコードされることに注意してください。それを実行encodeURIComponent
すると、最初の例で見た混乱が発生します。
エンコードされる文字は何ですか?
最初の投稿で yabol がコメントしたように、このページでは、encodeURI、encodeURIComponent、および escape: lower ASCII characters の違いを示します。encodeURIComponent
次の文字をエンコードしてencodeURI
いないことに特に気付きます。
chr encodeURI(chr) encodeURIComponent(chr)
+ + %2B
/ / %2F
@ @ %40
# # %23
$ $ %24
& & %26
, , %2C
: : %3A
; ; %3B
= = %3D
? ? %3F
あなたの質問
encodeURIComponent
クエリ文字列の URL をエンコードしているため、正しい使用です。これは私の最初の例に戻ります。クエリ文字列 URL (エンコードしている URL) にクエリ文字列が含まれている場合はnext
、それをメイン URL の一部ではなく、 の一部にする必要があります。
違う
"http://example.com/?next=" + encodeURI('http://abc.com/my page.html?name=bob&foo=bar')
"http://example.com/?next=http://abc.com/my%20page.html?name=bob&foo=bar"
example.com の URL には、次の 2 つのクエリ文字列パラメーターがnext
あります。foo
右
"http://example.com/?next=" + encodeURIComponent('http://abc.com/my page.html?foo=bar')
"http://example.com/?next=http%3A%2F%2Fabc.com%2Fmy%20page.html%3Fname%3Dbob%26foo%3Dbar"
example.com の URL には、クエリ文字列パラメーターが 1 つだけ含まれています。next