URL编码解码字符串,互联网无歧义传输,Go一招鲜吃遍天!

引言

在本文中,您将了解如何在Golang中对查询字符串或路径段进行URL编码。URL编码,也称为百分比编码,将包含

不可打印、保留或非ascii字符的字符串转换为可以在internet上传输的普遍接受的格式

URL编码的数据也称为
application/x-www-form-urlencoded
MIME格式。

URL编码解码字符串,互联网无歧义传输,Go一招鲜吃遍天!

编码

Go的net/url包内有一个名为QueryEscape的内置方法来转义/编码一个字符串,这样它就可以安全地放在URL查询中。下面的示例演示如何在Golang -中对查询字符串进行编码。

<code>

package

main

import

(

"fmt"

"net/url"

)

func

main

()

{ query :=

"Hellö Wörld@Golang"

fmt.Println(url.QueryEscape(query)) }/<code>

输出内容:

<code>Hell%C3%B6+W%C3%B6rld%40Golang/<code>

对多个查询参数的编码

如果希望同时对多个查询参数进行编码,则可以创建 url.Values 由查询参数到值的映射组成,并使用url.Values.Encode()方法对所有查询参数进行编码。

下面是一个例子:

<code> 

package

main

import

(

"fmt"

"net/url"

)

func

main

()

{ params := url.Values{} params.Add(

"name"

,

"@Rajeev"

) params.Add(

"phone"

,

"+919999999999"

) fmt.Println(params.Encode()) }/<code>

输出内容:

<code>

name

=

%40

Rajeev&phone=

%2

B919999999999/<code>

对URL路径编码

与QueryEscape一样,Go中的net/url包也有另一个名为PathEscape()的函数,用于对字符串进行编码,以便将其安全地放置在URL的路径段中。

举个栗子:

<code>

package

main

import

(

"fmt"

"net/url"

)

func

main

()

{ path :=

"path with?reserved+characters"

fmt.Println(url.PathEscape(path)) }/<code>

输出内容:

<code>

path

%20

with

%3

Freserved+characters/<code>

通过编码各个部分来构建完整的URL

最后,让我们看一个完整的例子,在Golang中进行URL解析和编码。

<code>

package

main

import

(

"fmt"

"net/url"

)

func

main

()

{ baseUrl, err := url.Parse(

"http://www.mywebsite.com"

)

if

err !=

nil

{ fmt.Println(

"Malformed URL: "

, err.Error())

return

} baseUrl.Path +=

"path with?reserved characters"

params := url.Values{} params.Add(

"q"

,

"Hello World"

) params.Add(

"u"

,

"@rajeev"

) baseUrl.RawQuery = params.Encode() fmt.Printf(

"Encoded URL is %q\n"

, baseUrl.String()) }/<code>

输出内容:

<code>Encoded URL is 

"http://www.mywebsite.com/path%20with%3Freserved%20characters?q=Hello+World&u=%40rajeev"

/<code>

写在最后

从部分到整体,构建起来整个功能,这是拆解的用法。到更复杂的场景下用起来吧。

Happy coding :)


分享到:


相關文章: