问题背景
接收客户端传入参数,base64解码失败,经过排查发现原因是参数上传前字符串中有+,但是PHP接收后,发现+变成了空格,导致base64解码失败。
测试验证
访问一个测试的接口 /internal/test
curl 'http://127.0.0.1/internal/test?a=abc+def'
验证1:
简单输出$_GET
public function test() {
var_dump($_GET);
}
结果:
array(1) {
["a"]=>
string(7) "abc def"
}
结论:可以看到直接接收GET参数,+变成了空格
+变成空格的原因
经过一顿查资料,首先我们要知道URL编码是什么
URL编码
一个例子
我们常见的一个URL,例如CSDN搜索功能的一个URL(https://so.csdn.net/so/search/s.do?q=PHP基于字典树算法实现搜索联想功能&t=&u=),当你从浏览器中复制出来的时候,这个URL长下面这样子 https://so.csdn.net/so/search/s.do?q=PHP%E5%9F%BA%E4%BA%8E%E5%AD%97%E5%85%B8%E6%A0%91%E7%AE%97%E6%B3%95%E5%AE%9E%E7%8E%B0%E6%90%9C%E7%B4%A2%E8%81%94%E6%