同様の入力で、URL.RawQueryが正しく埋め込まれているようです。なぜurl.ParseにURL.RawPathが設定されないのですか?
u, err := url.Parse("https://example.com/foo%2fbar")
if err != nil {
log.Fatal(err)
}
fmt.Println(u.Path)
fmt.Println(u.RawPath)
fmt.Println(u.String(), "\n")
u, err = url.Parse("https://example.com/foo%25fbar?q=morefoo%25bar")
if err != nil {
log.Fatal(err)
}
fmt.Println(u.Path)
fmt.Println(u.RawPath)
fmt.Println(u.RawQuery)
fmt.Println(u.String())
クエリで '%'をエスケープする必要はありませんか?そうでない場合、なぜurl.Encodeはクエリで '%'を '%25'に変更しますか? – Sridhar
@Sridharはい(それがparamの名前または値の一部である場合)。しかし、ここでの質問は、 '%25'が' URL.RawPath'を埋めるのを阻止するのはなぜですか、 '%2f'はそれを妨げません。答えは '%25'は答えに記載されている基準に基づいてパスを無効にするためですが、'%2f'はそうではありません。 – icza