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

作为一个 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

查看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Golang中的哈夫曼树编码是一种数据压缩算法,适用于将大数据量进行高效的压缩和压缩操作。哈夫曼树编码的原理是根据字符出现的频率构建一棵树,出现频率较高的字符使用较短的编码,出现频率较低的字符使用较长的编码,从而实现数据的压缩。 在Golang中,可以使用哈夫曼树编码库来实现这一算法。首先,需要统计字符的出现频率,可以通过遍历待压缩的数据来进行统计。然后,根据字符的频率构建哈夫曼树,可以使用优先队列或堆来实现。 一旦构建好了哈夫曼树,就可以生成每个字符对应的哈夫曼编码编码过程中,从根节点开始,遍历树的路径,当遇到左子树时将路径上加入0,遇到右子树时加入1,直到到达叶子节点,将路径上的编码记录下来。最终,每个字符对应的哈夫曼编码就是根据路径上的0和1组成的。 对于压缩数据,在编码时将每个字符替换成对应的哈夫曼编码,将压缩后的编码写入到新的文件中。对于压缩数据,需要读取压缩文件中的编码,根据哈夫曼树的结构进行逐个字符的码操作。 总而言之,Golang中的哈夫曼树编码是一种高效的数据压缩算法,通过统计字符出现的频率构建哈夫曼树,然后生成每个字符对应的哈夫曼编码,从而实现数据的压缩和压缩操作。通过使用相关的库,可以方便地实现这一算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值