深入认识 http_build_query 函数

事件起因

今天在调用一个同事的接口时候,遇到了一个问题,这个接口是通过用户登录名获取该用户登录后的token的,该登录名可能是手机号也可能是邮箱。于是按照他的接口加密方式进行签名调用发现一个问题,手机号是可以获取成功的,但是使用邮箱的时候却报签名错误。

查找原因

我怀疑是由于邮箱因为@符号,导致我的签名在他那里不能通过,然后我看了一下签名方法,大概就是把参数数组进行排序,然后拼接私钥就行md5加密,然后拼接的时候用到了 http_build_query 函数,难道是这里出问题了?我去php官方手册查看了下这个函数的介绍

深入认识 http_build_query 函数

这个函数最后生成的是一个经过URL-encode 之后的请求字符串,看到这里我们就明白了,@符号肯定是被转义了,我把拼接后的字符串打印了一下,果然@符号呗转义成%40。那么我应该在md5之前把%40还原成@.

解决办法

1.既然http_build_query函数结果是url-encode,那么我只要decode回来就可以了,所以可以选用urldecode()函数处理完了然后在md5加密,最后也证实成功了。
2.或者我们直接不用http_build_query函数处理,用循环然后拼接的方式,这样就可以不用担心特殊符号被转义了。

总结

有时候我们使用php编程的时候,有些函数我们只知道是用来干嘛的,但是没有仔细看官方文档,不是真正了解这个函数转化的结果类型等。下面贴出一些常见网址URL中特殊字符转义编码

深入认识 http_build_query 函数

本作品采用《CC 协议》,转载必须注明作者和本文链接
人生的意义在于承担人生无意义的勇气
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!