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

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

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


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

查看所有标签

猜你喜欢:

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

Concepts, Techniques, and Models of Computer Programming

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 转换

RGB HSV 互转工具