JS为什么有时候要做两次encodeURI
2014-03-27 00:38
190 查看
JS为什么有时候要做两次encodeURI
这个问题的根本原因是服务器会自己做一次解码,且解决的字符集不一定是UTF-8。
对于var url = "b.jsp?name="+u_name; 要想把中文的name传到后台,需要对url进行一次编码,否则是乱码。A.
前端:var url1=encodeURI(url);
后台:String name=request.getParameter("name");
有时会乱码,为什么?因为接收时, 直接
String paramValue = request.getParameter(paramName);
Tomcat容器会自动解码。
encodeURI使用的是 UTF-8 编码规则来编的。如果 request.getParameter(paramName) 时,容器也按 UTF-8 解的话,没有问题。如果容器没有按 UTF-8 解的话, 结果只有一个,就是乱码!
容器按什么编码来解码,决定于 request.setCharacterEncoding(***) 或者 服务器程序配置。如果能设置request.setCharacterEncoding("UTF-8")并修改服务器配置,让容器在解 GET 提交的参数时,使用UTF-8,则没有任何问题。
B.
前端:url1=encodeURI(url);
url2=encodeURI(url);
后台:String name1=request.getParameter("name");
String name2 = java.net.URLDecoder.decode(name1,"UTF-8");
不管容器用的什么编码,都不会有乱码:url1会把url中的中文编为ASCII码。
url2对url1进行再编码,由于是对ASCII码进行编码,在request.getParameter("name")解码的时候,不管是按 GBK 还是 UTF-8 还是 ISO-8859-1 都好,都能够正确的得到url1。
因为ASCII码用GBK、UTF-8、ISO-8859-1编码的结果是相同的。
相关文章推荐
- JS为什么有时候要做两次encodeURI
- 为什么需要JS里常需要做两次encodeURI(url)
- 为什么js代码块有时候不起作用,需要放在body标签中
- 为什么有时候要两次 Ctrl+Z 才能结束输入 编写程序时 ctrl+z的错误
- URL编码(汉字)后提交给后台相关问题,为什么后台有时候解码一次,有时候解码两次
- 为什么要两次调用encodeURI来解决乱码问题
- encodeURI来解决URL传递时为什么需要进行两次encodeURI编码
- JS中为什么会存在escape、encodeURI和encodeURIComponent方法
- JSP、AJax中文乱码问题解决,escape(), encodeURI(), encodeURIComponent(),js对参数连续两次调用 encodeURI(String) 方法
- encodeURI来解决URL传递时为什么需要进行两次encodeURI编码
- js为什么放到head中有时候失效
- 为什么有时候写js的第二个参数无效
- 为什么要两次调用encodeURI来解决乱码问题
- 为什么JS动态生成的input标签在后台有时候没法获取到
- 为什么要两次调用encodeURI来解决乱码问题
- vue.js为什么不能new两次?不是不能new两次,而是第一次new之后,{{}}已经没有了, 第二次vue的时候,识别不到{{}}了,所以第二次的参数没办法替换了,给人的感觉好像是第二次new不起
- 为什么前端页面encodeURI(url)两次,可以避免后台中文字符乱码
- 为什么有时候要 encodeURI(url)两次才不会出现乱码
- 为什么要两次调用encodeURI来解决乱码问题
- encodeURI来解决URL传递时为什么需要进行两次encodeURI编码