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+=
url编码处理转换后+变成%2B, =变成%3D。
在浏览器中传输结果如下,可以看到最终解码得到正确的字符串:view source
view parsed
view URL encoded
view decoded
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论