Golang URL编码实践

在Golang中,URL编码时遇到几个问题想请教大家:

  1. 使用url.QueryEscape和url.PathEscape有什么区别?分别在什么场景下使用更合适?
  2. 编码后的字符串如何正确解码?有没有需要特别注意的字符处理?
  3. 当需要编码整个URL而不仅是参数时,有没有推荐的最佳实践?
  4. 在处理特殊字符(如中文、空格、斜杠等)时,有没有遇到过什么坑?

希望能分享一些实际项目中的使用经验,谢谢!

2 回复

Golang中使用net/url包的QueryEscape进行URL编码,QueryUnescape解码。示例:

encoded := url.QueryEscape("hello world") // 输出 hello%20world
decoded, _ := url.QueryUnescape(encoded)

注意处理特殊字符,适用于查询参数编码。

更多关于Golang URL编码实践的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Golang中,URL编码可以使用 net/url 包来实现,主要通过 url.QueryEscape()url.PathEscape() 函数处理不同部分的编码需求。

1. 查询参数编码url.QueryEscape()

用于编码查询字符串中的参数(如 ?key=value),将特殊字符(如空格、&=)转换为 % 格式。

示例代码

package main

import (
    "fmt"
    "net/url"
)

func main() {
    param := "name=John Doe&age=30"
    encoded := url.QueryEscape(param)
    fmt.Println("Encoded:", encoded) 
    // 输出:name%3DJohn+Doe%26age%3D30

    // 解码
    decoded, _ := url.QueryUnescape(encoded)
    fmt.Println("Decoded:", decoded)
}

2. 路径段编码url.PathEscape()

适用于URL路径部分(如 /path/segment),编码规则与查询参数略有不同(例如空格转为 %20 而非 +)。

示例代码

func main() {
    path := "folder name/file.txt"
    encodedPath := url.PathEscape(path)
    fmt.Println("Encoded Path:", encodedPath) 
    // 输出:folder%20name%2Ffile.txt

    // 解码
    decodedPath, _ := url.PathUnescape(encodedPath)
    fmt.Println("Decoded Path:", decodedPath)
}

3. 完整URL编码

使用 url.URL 结构体构建和编码完整URL,自动处理各部分的编码。

示例代码

func main() {
    u := &url.URL{
        Scheme:   "https",
        Host:     "example.com",
        Path:     "/search path",
        RawQuery: "q=Golang & Net",
    }
    fmt.Println("Full URL:", u.String())
    // 输出:https://example.com/search%20path?q=Golang+%26+Net
}

注意事项:

  • 查询参数:用 QueryEscape(空格变 +)。
  • 路径部分:用 PathEscape(空格变 %20)。
  • 解码时使用对应的 QueryUnescapePathUnescape
  • 特殊字符(如 ?, #, %)会根据上下文自动处理。

通过标准库即可安全处理URL编码,避免手动拼接错误。

回到顶部