Go语言 为什么我的表单值在包含一个空值时为空?

7rtdyuoh  于 2024-01-04  发布在  Go
关注(0)|答案(2)|浏览(105)

?file=hello;的值为空。
?file=hello,它可以工作。
我试过这个:

err := r.ParseForm()
fmt.Println(err)
fileName := r.FormValue("file")

字符串

var err error
r.Form, err = url.ParseQuery(r.URL.String())
fmt.Println(err)
fileName = r.FormValue("file")


但我得到

error:invalid semicolon separator in query


我希望表单包含map[file:[hello;]],但我得到了map[],对于PostFormForm都是。

z9smfwbn

z9smfwbn1#

错误消息正确。查询中不允许使用保留字符;
通过percent-encoding修复查询字符串中的;?file=hello%3B

qnyhuwrf

qnyhuwrf2#

使用url.Parse(r.URL.RawQuery)
代码:

import (
    "fmt"
    "net/http"
    "net/url"
)

func handler(w http.ResponseWriter, r *http.Request) {
    url, err := url.Parse(r.URL.RawQuery)
    if err != nil {
        panic(err)
    }
    fileName := r.FormValue("file")
    fmt.Println("Parsed URL:", url)
    fmt.Fprintf(w, "Parsed URL: %s\nFile from FormValue: %s", url, fileName)
}

func main() {
    http.HandleFunc("/", handler)
    fmt.Println("Server listening on :8080")
    http.ListenAndServe(":8080", nil)
}

字符串
输出量:

Server listening on :8080
Parsed URL: file=hello;
Parsed URL: file=hello

相关问题