为什么要两次调用encodeURI来解决乱码问题
2024-08-24 03:15:08
.encodeURL函数主要是来对URI来做转码,它默认是采用的UTF-8的编码.
. UTF-8编码的格式:一个汉字来三个字节构成,每一个字节会转换成16进制的编码,同时添加上%号.
假设页面端输入的中文是一个“中”,按照下面步骤进行解码
1.第一次encodeURI,按照utf-8方式获取字节数组变成[-28,-72-83],对字节码数组进行遍历,把每个字节转化成对应的16进制数,这样就变成了[E4,B8,AD],最后变成[%E4,%B8,%AD] 此时已经没有了多字节字符,全部是单字节字符。
2、第二次encodeURI,进行编码,会把%看成一个转义字符,并不编码%以后字符,会把%编码成%25.把数组最后变成[%25E4,%25B8,%25AD]然后就把处理后的数据[%25E4,%25B8,%25AD]发往服务器端,
当应用服务器调用getParameter方法,getParameter方法会去向应用服务器请求参数
应用服务器最初获得的就是发送来的[%25E4,%25B8,%25AD],应用服务器会对这个数据进行URLdecode操作,应用服务器进行解码的这一次,不管是按照UTF-8,还是GBK,还是ISO-8859,,都能得到[%E4,%B8,%AD],因为都会把%25解析成%.并把这个值返回给getParameter方法
3、再用UTF-8解码一次,就得到"中"了。
想想看,如果不编码两次,当服务器自动解码的时候,假如是按照ISO-8859去解码UTF-8编码的东西,就是会出现乱码。
JS: document.authorityForm.action = basePath3+"User_viewUser.do? id="+id+"&roleName="+encodeURI(encodeURI(roleName))+"&roleType="+roleType; JAVA后台: roleName = java.net.URLDecoder.decode(getRequest().getParameter("roleName"),"UTF-8");
原文地址:http://blog.csdn.net/howlaa/article/details/12834595
最新文章
- Entity Framework 6 Recipes 2nd Edition(11-2)译 ->; 为一个”模型定义”函数返回一个计算列
- oc string
- python数学运算的类型转换
- Redis经验谈
- 动词 or 名词 :这是一个问题 【转载】
- [算法] 冒泡排序 Bubble Sort
- javascript 事件的学习
- mysql实例---sql语句中使用@变量
- J2EE中你必须了解的13种技术规范
- UIWebView与JS的深度交互-b
- 查看SQL语句执行时间与测试SQL语句性能
- Linux文档的压缩与打包
- JDK源代码学习-基础类
- 《Linux就该这么学》第四天课程
- eclipse安装插件的常用方法
- python模块--config
- WPF 字体路径设置
- tomcat 启动报错 Cannot allocate memory
- Oracle 11g 审计跟踪管理
- 关于无法解析的外部符号 _main
热门文章
- BZOJ1012 最大数maxnumber
- python的小练习
- 【XSY2190】Alice and Bob VI 树形DP 树剖
- 【AGC014E】Blue and Red Tree 并查集 启发式合并
- 解决 phpstorm 运行卡,自动关闭等问题
- 【hihocoder1167】高等理论计算机科学 (重链剖分 +树状数组)
- <;Android基础>;(三) UI开发 Part 1
- CodeVS1288埃及分数(IDA*)
- shell中的source和直接执行sh的区别
- 51nod 1105(第K大数 二分套二分)