使用js的encodeURI和encodeURIComponent编码后,java解析乱码

地址栏中出现汉字的情况有两种:一种是汉字出现在URL的路径部分;另一种是汉字出现在URL的传参的部分。
第二种情况的时候必须采用编码后传参。
原理:
在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码,两位两位取出后进行解码,然后再传递给处理页面,然后由处理页面进行再次解码。由此我想到一直使用encodeURI方法是正确的,只是需要使用两次encodeURI方法,例如encodeURI(encodeURI("中文"));第一次是把中文编码成%xy的格式,第二次是对%xy中的%进行编码。整个传参过程大体应该是:提交页面使用encodeURI(encodeURI("中文"))编码,把最后的编码结果%xy传递给处理页面的过程中,浏览器获取URL地址(注意openModelDialog方法,浏览器获取不到参数编码)后解码成%xy,然后把%xy传递给处理页面,处理页面使用URLDecoder.decode(request.getParameter("参数名"),"UTF-8");完成解码。使用encodeURIComponent也是一样的道理,只是他只对中文参数进行编码,如:
前台 js:
在前台对地址进行两次编码 encodeURIComponent(encodeURIComponent(message))
后台 java:
在后台使用URLDecoder.decode(request.getParameter("name"), "UTF-8");解码

猜你喜欢

转载自blog.csdn.net/j734948791/article/details/80825207