百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> 剖析PHP URL中特别字符引起的题目(+,\,=)
分享文章到:

剖析PHP URL中特别字符引起的题目(+,\,=)

发布时间:12/01 来源:未知 浏览: 关键词:
引荐:《PHP视频教程》

PHP中URL中非凡字符引发的问题(+,,=)

前言,在做某个渠道的历程中,发明一个验签错误的问题。但是,当时验签在两个地方展现不一致,统一套处置办法,想到了这是由于两个地方恳求方式是不一样的一个get办法别的一个天然是post办法。当然,出问题必定就是get。

GET和POST

GET恳求方式,由于是将参数放在URL中,所以在停止传递的时候大概会受到阅读器端的一些战略问题,对参数停止urlencode处置。所以,当你在效劳端拿到参数的时候大概并不是原始的数据。因此,在通过GET方式恳求拿到数据,假如不做任何处置的话去验签大概会存在问题。这边的大概就是当base64处置之后不含+这个非凡的字符,+在GET方式之后不做任何处置拿到的就是一个空白字符串。

POST恳求方式,是将参数放在request body中,在停止http传递的历程中不会存在由于阅读器的一些战略问题对参数停止任何的处置。因此,通过POST恳求停止参数验签的时候不会存在问题,能够很顺利的停止验签。但是,我们没有方法去要求渠道商将get恳求变成post恳求,因此我们只能本人想方法。

urlencode和urldecode

urlencode:
(PHP 4, PHP 5, PHP 7)
urlencode — 编码 URL 字符串
string urlencode ( string $str )

此函数便于将字符串编码并将其用于 URL 的恳求部分,同时它还便于将变量传递给下一页。

return

返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被更换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样

urldecode:
(PHP 4, PHP 5, PHP 7)

urldecode — 解码已编码的 URL 字符串

string urldecode ( string $str )

解码给出的已编码字符串中的任何 %##。 加号('+')被解码成一个空格字符。

返回解码后的字符串。

仿佛我们看到了曙光,对+这个会变成空格的字符串的"完善处置方式"。那就是,对签名字符串停止urlencode停止加密处置。然后,兴致勃勃的去验证,fxxk,false。还是不通过,然后甩本人一个耳光。base64加密之后会显现=这个补位字符串,很蛋疼。于是我就想了一个暂时处置方式。

urlencode(substr($str,0,strlen($sign)-2)).substr($sign,strlen($sign)-2)

当时,思考到base64最多显现两个==,所以在最后两个不停止urlencode处置。这个根本上能够处置,但是大概存在一个问题,那就是在最后两位显现+也是不可的,公然这个方案不克不及说服本人,推翻。并且在这个历程还发明一个问题就是,传过来的签名字符串还有大概会已经经过urlencode处置。这个还是一个小问题,先停止urldecode处置,由于decode不会引发误解。

当时,小伙伴提出一个解决方法,那就是直接更换+号不就可以了吗?确实,这是一个方法。但是我认为这个方法很挫,假如今后加密算法改动了或者增添了其他非凡字符呢,比方@#¥%……&**( 等这些,我们不成能都去匹配更换什么的。所以,我赞成暂时方案处置,但是我连续想。

rawurlencode和rawurldecode

rawurlencode:
(PHP 4, PHP 5, PHP 7)

rawurlencode — 依照 RFC 3986 对 URL 停止编码

string rawurlencode ( string $str )

按照 ? RFC 3986 编码指定的字符。

rawurldecode:
(PHP 4, PHP 5, PHP 7)

rawurldecode — 对已编码的 URL 字符串停止解码

string rawurldecode ( string $str )

返回字符串,此字符串中百分号(%)后跟两位十六进制数的序列都将被更换成原义字符。

新的曙光显现了,懂得rawurldecode,更换成原义字符。所以,解决方案跃然纸上了。

rawurldecode(urlencode(urldecode($sign))));

初看上去觉得还臃肿或者为什么要这么绕来绕去处置呢?其实你还真得这么处置,至于为什么,请看上上面的吹牛逼。

跋文

作为程序员,我们必需要有两手预备,一手暂时方案,能够快速修复此刻问题。在生产环境复原正常,但是从长远来看必需要能够一个不乱可靠的方案。方案来源于你不竭的尝试和php.net。

以上就是剖析PHP URL中非凡字符引发的问题(+,\,=)的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板