前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >URL编码解码字符串,互联网无歧义传输,Go一招鲜吃遍天!

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

作者头像
程序员小助手
发布2020-04-28 10:55:00
4.4K0
发布2020-04-28 10:55:00
举报
文章被收录于专栏:程序员小助手程序员小助手

引言

在本文中,您将了解如何在Golang中对查询字符串或路径段进行URL编码。URL编码,也称为百分比编码,将包含不可打印、保留或非ascii字符的字符串转换为可以在internet上传输的普遍接受的格式

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

编码

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

代码语言:javascript
复制
package main

import (
	"fmt"
	"net/url")func main() {
	query := "Hellö Wörld@Golang"
	fmt.Println(url.QueryEscape(query))}

输出内容:

代码语言:javascript
复制
Hell%C3%B6+W%C3%B6rld%40Golang

对多个查询参数的编码

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

下面是一个例子:

代码语言:javascript
复制
package main

import (
	"fmt"
	"net/url")func main() {
	params := url.Values{}
	params.Add("name", "@Rajeev")
	params.Add("phone", "+919999999999")

	fmt.Println(params.Encode())}

输出内容:

代码语言:javascript
复制
name=%40Rajeev&phone=%2B919999999999

对URL路径编码

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

举个栗子:

代码语言:javascript
复制
package main

import (
	"fmt"
	"net/url")func main() {
	path := "path with?reserved+characters"
	fmt.Println(url.PathEscape(path))}

输出内容:

代码语言:javascript
复制
path%20with%3Freserved+characters

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

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

代码语言:javascript
复制
package main

import (
	"fmt"
	"net/url")func main() {
	// base url
	baseUrl, err := url.Parse("http://www.mywebsite.com")
	if err != nil {
		fmt.Println("Malformed URL: ", err.Error())
		return
	}

	// 添加query string参数
	baseUrl.Path += "path with?reserved characters"

	// 参数准备
	params := url.Values{}
	params.Add("q", "Hello World")
	params.Add("u", "@rajeev")

	// 附加query string到url上
	baseUrl.RawQuery = params.Encode() 

	fmt.Printf("Encoded URL is %q\n", baseUrl.String())}

输出内容:

代码语言:javascript
复制
Encoded URL is "http://www.mywebsite.com/path%20with%3Freserved%20characters?q=Hello+World&u=%40rajeev"

写在最后

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

Happy coding :)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小助手 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 编码
  • 对多个查询参数的编码
  • 对URL路径编码
  • 通过编码各个部分来构建完整的URL
  • 写在最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档