如何解决Http请求参数中加号变空格问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解决Http请求参数中加号变空格问题相关的知识,希望对你有一定的参考价值。

http请求参数中英文加号是要进行url编码的,因为在http请求参数中加号就是空格的替代字符啊(因为空格对于http协议规定的url来说是一个非法字符),所以当你的请求参数中出现了一个加号,就会一律理解成一个空格。解决的方法就是对加号进行编码转换,url编码的方法是将需要转换的字符,转换成英文百分号加字符的十六进制形式,比如空格除了加号表示以外也可以表示成%20,20就是空格的十六进制形式。 参考技术A 错误原因:
我没有深究原因,宽泛的说,就是在传输前后过程中,经历的几次编码和解码标准不同,导致加号、空格等字符的错误。
简单的解决方法:
遇到这种情况时,一种快速的解决方法是: 把参数中所有的加号“+”,替换为“%2B”即可
(可能这种方法并不好,应该可以采用传递前对数据进行某格式的encode,获取数据时进行decode即可)

PHP学习 base64_encode +号变空格

在进行base64编码解码的时候出现的+号在通过html由后台php->get读取时会被自动替换成空格,造成乱码的问题

经过查证这并不是echo显示出错而是客观存在的

原因摘自:http://blog.csdn.net/wang0928007/article/details/7429568

“加号(+)是BASE64编码的一部分,而加号在QueryString中被当成是空格。    因此,当一个含有BASE64编码的字符串直接作为URL的一部分时,如果其中含有加号,则使用QueryString读取时,再使用BASE64解码就会发生错误。    解决的办法有两个:一是使用BASE64的字符串作为URL的一部分是,使用UrlEncode一类的函数进行编码;二是在接收BASE64字符串后,使用ReplaceAll将字符串中的空格替换成加号,然后再解码。  " 

 

//解决base64转码过程中+变成空格的问题
$key = str_replace(‘ ‘,‘+‘,$this->input->get(‘key‘));
$key = base64_decode($key);
        

程序中采用直接替换的方式,但不能避免别的符号出现错误,目前似乎只有+号会出错?待排查

以上是关于如何解决Http请求参数中加号变空格问题的主要内容,如果未能解决你的问题,请参考以下文章

GET 请求 + 号被替换成空格的问题解决方案

PHP学习 base64_encode +号变空格

如何从 Spring MVC 中的请求参数中修剪空格

http请求 url 传递参数(特殊字符)解决方法

如何解决 HTTP 参数污染警告?

get请求如何在url中加入数组参数