http 请求参数+号变成空格问题

http 请求参数+号变成空格问题

最近遇到protobuffer数据转换的Base64字符串在发到后端出现异常的问题,调查了一下发现base64里的+号发过去变成了空格,进一步查找发现是由于我们的数据是附在url,实际上是url转换造成的,其实我们应该对parameter做转码处理,再通过url发送才不会出现这样的问题。

1.问题原因:

例如下面的字符串:

ABCDEFGabcdefg+=

在浏览器中:
查看原来view source
在这里插入图片描述
浏览器转换后 view parsed
在这里插入图片描述
view encoded
在这里插入图片描述

view decoded
在这里插入图片描述
可以看到经过encoded decoded后+号就变成空格了。

2 解决方法:

查找了一些解决方法,前端可以通过对url进行编码解决,具体可以通过直接正则匹配+号等替换成%2B,也可以调用encodeURIComponent这个函数。

encodeURIComponent
返回值
URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。
说明
该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ’ ( ) 。

其他字符(比如 :;/? : @&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。

ABCDEFGabcdefg%2B%3D

另一个encodeURI其实不会处理+:
encodeURI
返回值
URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。
说明
该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ’ ( ) 。

该方法的目的是对 URI 进行完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/? : @ &=+$,#

ABCDEFGabcdefg+=

转换后+变成%2B, =变成%3D。
在浏览器中传输结果如下,可以看到最终解码得到正确的字符串:
view source
在这里插入图片描述
view parsed
在这里插入图片描述
view URL encoded
在这里插入图片描述
view decoded
在这里插入图片描述

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值