是否有一种标准的方法来编码在Go中包含正斜杠和空格的URI组件?

时间:2016-06-29 02:46:18

标签: go escaping

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

我转向net/url来解决这个问题,但事实证明它并没有做我想做的事情。

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

由于我很可能会把它搞砸(逃脱non-trivial),我更倾向于依靠一些标准库来为我做这件事。这种标准方法是否存在于经过充分测试的Go库中?

旁注:我寻求的行为与JS encodeURIcomponent相同。

1 个答案:

答案 0 :(得分:0)

显然,您的问题版本已在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))
}

好问题。