内容简介:作为一个PHP开发者,在PHP语言中,我们对URL进行编码和解编码处理,可以使用在 Golang 中有解析 URL 可以使用
作为一个 PHP 开发者,在PHP语言中,我们对URL进行编码和解编码处理,可以使用 urlencode()
和 urldecode()
函数。
在 Golang 中有 net/url
包是用来专门处理 URL 的, net/url
包有完整的URL解析函数,编码函数,解编码函数。
URL 解析
解析 URL 可以使用 url.Parse()
函数。这个函数功能类似于 PHP 下的 parse_url()
函数。
import ( "fmt" "github.com/liudng/godump" "net/url" ) urlStr := "https://cong5.net/post/golang?name=张三&age=20&sex=1" parseUrl,_ := url.Parse(urlStr)
URL 解析后,我们来看一下返回的数据结构:
(*url.URL) (url.URL) Scheme(string) "https" Opaque(string) "" User(*url.Userinfo) User(string) "" Host(string) "www.example.com" Path(string) "/index.php" RawPath(string) "" ForceQuery(bool) false RawQuery(string) "name=张三&age=20&sex=1" Fragment(string) ""
要获取里面的某个值,可以这样直接获取:
fmt.Println("Scheme:" + parseUrl.Scheme) fmt.Println("Host: " + parseUrl.Host) //还有 parseUrl.Hostname() 也是获取主机名 fmt.Println("Path: " + parseUrl.Path) fmt.Println("RawQuery:" + parseUrl.RawQuery) //输出 //Scheme:https //Host: cong5.net //Path: /post/golang //RawQuery:name=张三&age=20&sex=1
读取 URL 参数
通过上面的操作返回的对象,我们发现回去到的 Query 参数是一个字符串,没有解析。
如果我们想获取 Query 参数呢?在PHP中我们可以使用 parse_str()
函数解析成数组。
query := parseUrl.Query() fmt.Println("name:" + query.Get("name")) fmt.Println("age:" + query.Get("age")) fmt.Println("sex:" + query.Get("sex")) //name:张三 //age:20 //sex:1
编码完整的URL
如果我们要对完整的 URL 进行编码呢?
就是PHP中 urlencode()
函数的功能。
在 GO 语言下可以直接使用 url.QueryEscape()
函数。
escapeUrl := url.QueryEscape(urlStr) fmt.Println(escapeUrl) /** 输出:https%3A%2F%2Fcong5.net%2Fpost%2Fgolang%3Fname%3D%E5%BC%A0%E4%B8%89%26age%3D20%26sex%3D1 **/
解编码
既然有了编码,那么就肯定有配套的解编码函数的了。
PHP中有 urldecode()
函数的功能。
在GO 语言下可以直接使用 url.QueryUnescape()
函数。
enEscapeUrl, _ := url.QueryUnescape(escapeUrl) fmt.Println(enEscapeUrl) //输出: //https://cong5.net/post/golang?name=张三&age=20&sex=1
单独拼接 URL 参数
有了解析,编码、解码的函数了。那么我们可能还想到一个 PHP 下的函数 http_build_query()
,这个函数可以自动拼接生成URL参数字符串的功能。
在 GO 语言下同样可以,在 GO 语言中获取 Query()
实例,然后有 GET/SET/ADD/DEL
方法对参数进行获取,增加,删除,修改等操作。
var urlS url.URL q := urlS.Query() q.Add("name", "张三") q.Add("age", "20") q.Add("sex", "1") queryStr := q.Encode() fmt.Println(queryStr) //输出: //age=20&name=%E5%BC%A0%E4%B8%89&sex=1
更多的函数,如 Http Base Auth认证获取认证的用户名和密码等信息的,可以到 net/url 查看。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 提高 Rails 开发者编码效率的实用小贴士
- 提高 Rails 开发者编码效率的实用小贴士
- 编码、摘要和加密(一)——字节编码
- 新媒体编码时代的技术:编码与传输
- MySQL数据库字符编码总结--数据传输编码
- ios平台实现视频H264硬编码及软编码(附完整demo)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。