内容简介:作为一个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)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Concepts, Techniques, and Models of Computer Programming
Peter Van Roy、Seif Haridi / The MIT Press / 2004-2-20 / USD 78.00
This innovative text presents computer programming as a unified discipline in a way that is both practical and scientifically sound. The book focuses on techniques of lasting value and explains them p......一起来看看 《Concepts, Techniques, and Models of Computer Programming》 这本书的介绍吧!
随机密码生成器
多种字符组合密码
RGB HSV 转换
RGB HSV 互转工具