Urlであるクエリ文字列パラメータを持つ次のURLがあると言ってください。
http://www.someSite.com?next=http://www.anotherSite.com?test=1&test=2
next
パラメータをURLエンコードする必要がありますか?もしそうなら、それをデコードする責任があるのは誰ですか?ウェブブラウザまたは私のウェブアプリ?
私が尋ねる理由は、私が次のようなことをするたくさんの大きなサイトを見ているからです
http://www.someSite.com?next=http://www.anotherSite.com/another/url
上記では、私が推測しているので、彼らはnext
パラメータをわざわざエンコードしません。彼らは、クエリ文字列パラメータ自体がないことを知っています。 next
URLにクエリ文字列パラメータも含まれていない場合、これで問題ありませんか?
RFC 2396秒2.2 は、明示的な意味で使用されていない場所では、これらの記号をURLエンコードする必要があることを示しています。つまり、常にtargetUrl + '?next=' + urlencode(nextURL)
を形成する必要があります。
Webブラウザーは、これらのパラメーターを「デコード」しません。ブラウザはパラメータについて何も知りませんが、文字列を渡すだけです。 http://www.example.com/path/to/query?param1=value¶m2=value2
の形式のクエリ文字列は、ブラウザから次のようにGET要求されます。
GET /path/to/query?param1=value¶m2=value2 HTTP/1.1
Host: www.example.com
(other headers follow)
バックエンドでは、結果を解析する必要があります。 PHPの$_REQUEST
配列はすでにこれを行っていると思います。他の言語では、最初の?
文字を分割し、次に&
文字を分割し、次に最初の=
文字を分割し、名前と値の両方をurldecodeします。 。