关于url编码详细介绍需要看下阮一峰的文章普及基础知识:http://www.ruanyifeng.com/blog/2010/02/url_encoding.html
要想解决:前端用encodeURI()编码两次,为什么后台有时候解码一次,有时候解码两次的问题,要分成三个小问题解析。
一:前端用encodeURI()编码两次,为什么后台只需要解码一次
因为request.getParameter()函数时,会自动进行一次URI的解码过程,所以前端编码两次后端只要编码一次。
二:encodeURI()为什么要编码两次,我编码一次不行吗,为什么要费事的多编码一次
第一次编码后将汉字编码为%和字母数字的格式,而第二次编码的时候是对%字母数字进行编码,虽然解码的时候使用的是ISO-8859-1,但是对于%和字母数字而言用ISO-8859-1和UTF-8解码出来的是一样的,此时就回到了汉字被编码过一次的字符串了,当再次进行解码的时候使用UTF-8就回将它转会汉字;
三:为什么后台有时候解码一次,有时候解码两次
一般get和post请求会对参数进行再编码,所以如果你原来编码两次,再加上自己编码,相当于编码三次,所以后台需要解码两次。
window.location.href=拼接参数时,如果参数里有汉字会给你编码后请求,如果没有汉字,不会再编码。所以前端编码两次,后端解码一次。
博客原文链接:http://blog.csdn.net/wabiaozia/article/details/77607266
四:浏览器的地址栏有时会让我们误解,参考博主文章:http://blog.csdn.net/wabiaozia?viewmode=contents
有时我们看到地址栏里命名是汉字,没有编码啊,其实这是浏览器的人性化优化,你只要把地址栏里数据复制出来放在txt中就可以看到编码效果。
注:仅供参考