解码URL遇到的问题

日常开发过程中遇到了一个问题:后端返回的文件下载链接中的文件名,把原文件名的空格转义成了+,而前端解码是不会把+转回空格的。

原因是两边采用了不同的编码规范。

https://my.oschina.net/joymufeng/blog/620205

空格目前有两种不同的编码方式,一种是在HTML4中定义的,而另一种是在RFC-3986中定义的。
按照HTML4规范,空格应该被编码成加号”+”,而如果字符本身就是加号”+”,则应该被编码成%2B。

RFC-3986中采用统一的编码方式,字符的编码格式为:%HH(H为十六进制字符), 并没有对空格做特殊处理。按照RFC-3986规范,空格被编码成%20,而加号”+”被编码成%2B。

PS:

encodeURI方法不会对下列字符编码: ASCII字母、数字、~!@\#$&\*()=:/,;?+'

encodeURIComponent方法不会对下列字符编码:ASCII字母、数字、~!\*()'

因此,面对后端的这种编码方式,前端处理的话要先将url里面的+替换成%20,再用decodeURIComponent解码

0%