javascript默认有2个对url编码函数
- encodeURI()
- encodeURIComponent()
js的url编码函数
两者的效果如下:
// 原字段
https://www.52dixiaowo.com?s=我是中文参数
// encodeURI编码结果
https://www.52dixiaowo.com?s=%E6%88%91%E6%98%AF%E4%B8%AD%E6%96%87%E5%8F%82%E6%95%B0
// encodeURIComponnent编码结果
https%3A%2F%2Fwww.52dixiaowo.com%3Fs%3D%E6%88%91%E6%98%AF%E4%B8%AD%E6%96%87%E5%8F%82%E6%95%B0
还是看不太明白?如果你使用ajax发送参数时,你应该使用的编码是encodeURIComponent,因为参数中的所有编码都应该被编码
如果你想拼接一个url进行访问,那么使用encodeURI。
一个很简单的例子,正如你使用了encodeURI进行编码”C++”这个字段使用ajax的get请求发送到后端,后端接收到并解码后得到的是”C “,因为两个++变成了一个空格。
ajax的get中文乱码
正如上述所说,要解决该问题,只需要
参数 = encodeURIComponent(参数);
通过对该参数进行编码,在后端进行url解码即可。
为什么get会乱码?而post不会?
get发送时会访问该url,后端也通过当前url判断,可当你访问该url时,你输入的字符不被浏览器承认,也就是组成的url是错误的,含有非法字符被浏览器自动转码,所以后端取到的也是错误的。
而post参数是在http协议的body中,并不受影响。
本篇完,还有疑问?留下评论吧