1 回答
TA贡献1797条经验 获得超6个赞
请注意,这URL.RawPath不是原始(转义)路径。可能是,但并非总是如此。这只是一个提示。它的文档说:
RawPath string // encoded path hint (Go 1.5 and later only; see EscapedPath method)
因此,当您需要转义路径时,请始终使用URL.EscapedPath()并且不要依赖该URL.RawPath字段。文档URL.EscapedPath()说:
当 EscapedPath是 u.Path 的有效转义时,它会返回u.RawPath 。
这是你的情况。如果原始路径包含在 URL 编码期间需要转义的字节,则它是无效的。您的路径就是这样一个示例,因为它包含%25哪个是百分比符号本身的 URL 转义文本,'%'如果是 URL 路径的一部分,则需要对百分比符号进行转义。
您包含的第一个示例%2f是斜杠的 URL 转义文本'/',如果存在于路径中则不需要转义('/'是路径中的有效字符并被视为分隔符)。
看这个例子:
u, err = url.Parse("https://example.com/foo%25fbar?q=morefoo%25bar")
if err != nil {
log.Fatal(err)
}
fmt.Println("Path: ", u.Path)
fmt.Println("RawPath: ", u.RawPath)
fmt.Println("EscapedPath:", u.EscapedPath())
fmt.Println("RawQuery: ", u.RawQuery)
fmt.Println("String: ", u.String())
输出(在Go Playground上试试):
Path: /foo%fbar
RawPath:
EscapedPath: /foo%25fbar
RawQuery: q=morefoo%25bar
String: https://example.com/foo%25fbar?q=morefoo%25bar
RawPath是空字符串(因为"/foo%25fbar"是无效的转义路径),但EscapedPath()会返回原始的转义路径。
- 1 回答
- 0 关注
- 267 浏览
添加回答
举报