PHP 开发者学 Golang 之 URL 编码 (Urlencode)、解编码 (Urldecode)

栏目: PHP · 发布时间: 5年前

内容简介:作为一个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 查看。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

高可用架构(第1卷)

高可用架构(第1卷)

高可用架构社区 / 电子工业出版社 / 2017-11-1 / 108.00元

《高可用架构(第1卷)》由数十位一线架构师的实践与经验凝结而成,选材兼顾技术性、前瞻性与专业深度。各技术焦点,均由极具代表性的领域专家或实践先行者撰文深度剖析,共同组成“高可用”的全局视野与领先高度,内容包括精华案例、分布式原理、电商架构等热门专题,及云计算、容器、运维、大数据、安全等重点方向。不仅架构师可以从中受益,其他IT、互联网技术从业者同样可以得到提升。一起来看看 《高可用架构(第1卷)》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器