首页 > 解决方案 > 我们如何管理 Rest API 查询参数中的“#”

问题描述

我面临着从查询参数中提取完整值的挑战。

例如,我有一个localhost:8080/myAPI?name=Shop & stop #1234

我也有这个问题,&但至少之后的内容&被填充为单独的参数。我写了一些逻辑来管理它。

来到#,之后的内容#根本不会被填充。我正在使用net/http图书馆。

有没有人遇到过类似的问题?

标签: gourlescaping

解决方案


首先,在 URL 中,该&字符具有特殊含义:它分隔查询参数。因此,如果您在 URL 中编码的数据包含&字符,则必须对其进行转义url.QueryEscape()可以向您展示转义形式的外观:

fmt.Println(url.QueryEscape("Shop & stop "))

它输出:

Shop+%26+stop+

请注意,它&被转义为%26,并且空格也被替换为+符号。

因此,您的有效输入 URL 应如下所示:

rawURL := "http://localhost:8080/myAPI?name=Shop+%26+stop+#23452"

使用该net/url包解析有效的 URL,它还支持获取参数值和您要查找的片段(片段是字符后面的剩余部分#

u, err := url.Parse(rawURL)
if err != nil {
    panic(err)
}

fmt.Println(u.Query().Get("name"))
fmt.Println(u.Fragment)

这输出:

Shop & stop 
23452

试试Go Playground上的示例。


推荐阅读