我正在与一个API进行交互,该API使用可能包含正斜杠和空格的URI组件。我需要对这个URI组件进行百分比编码,以便正确地对正斜杠和空格进行编码。可以找到示例Go代码 here

我转向net/url来解决这个问题,但是事实证明,它并没有满足我的要求。

  • url.QueryEscape()用于查询字符串,因此它将空格转换为+而不是%20
  • url.Parse()url.ParseRequestUri()会将空格转换为%20,但它将按需忽略/

  • 由于我很可能会对此进行处理(转义为non-trivial),所以我宁愿依靠那里的一些标准库来为我做这件事。经过良好测试的Go库中是否存在这样的标准方法?

    旁注:我正在寻找的行为与JS的encodeURIcomponent相同。

    最佳答案

    显然,您发布的版本在go1.8中以url.PathEscape的形式发布。

    在go1.8中,您要查找的代码非常简单:

    package main
    
    import (
        "fmt"
        "net/url"
    )
    
    const expected = "/object/test%2Fbar%20baz"
    
    func main() {
        uri := "/object/"
        name := "test/bar baz"
    
        fmt.Printf("%-25s %s\n", "Expected:", expected)
        fmt.Printf("%-25s %s\n", "Actual  :", uri+url.PathEscape(name))
    }
    

    好问题。

    10-01 18:44
    查看更多