“网络/网址”无法解析带有磅的网址

我有下一个代码。


主要.go:


package main


import "fmt"

import "net/url"


func main() {

    connString := "postgresql://postgres:password@192.168.1.10:5432/postgres"

    parsedUrl, err := url.Parse(connString)

    if err != nil {

        fmt.Println(err)

    }

    fmt.Println("=")

    fmt.Println(parsedUrl.User)

    fmt.Println("=")

}

执行:


$ go run main.go

=

postgres:password

=

到目前为止,一切顺利,您可以看到我们成功地获得了.当我更改其中有绑定的密码时,会出现问题。parsedUrl.Userpostgres:passwordpassword#


connString := "postgresql://postgres:password#@192.168.1.10:5432/postgres"

然后,再次运行它,它输出如下:


=


=

您可以看到代码无法获取 。它看起来在html中会被视为锚点,这是根本原因吗?postgres:password##


总而言之,我的问题是:我如何修复我的代码来处理我在密码中的情况?#


呼啦一阵风
浏览 97回答 2
2回答

倚天杖

是,表示片段。#解决这个问题的一种方法是转义角色:#connString := fmt.Sprintf("postgresql://postgres:password%s@192.168.1.10:5432/postgres", url.PathEscape("#"))parsedUrl, _ := url.Parse(connString)fmt.Println(url.PathUnescape(parsedUrl.User.String()))输出:postgres:password# <nil>

不负相思意

您可以使用url.QueryEscape()例package mainimport (&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "net/url")func main() {&nbsp; &nbsp; connString := `postgresql://postgres:` + url.QueryEscape(`password#`) + `@192.168.1.10:5432/postgres`&nbsp; &nbsp; xurl, err := url.Parse(connString)&nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println(err)&nbsp; &nbsp; }&nbsp; &nbsp; fmt.Println("=")&nbsp; &nbsp; fmt.Println(xurl.User.Username())&nbsp; &nbsp; fmt.Println(xurl.User.Password())&nbsp; &nbsp; fmt.Println("=")}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go