web项目中页面传参到后台,后台传参到页面的编码问题
2010-04-14 14:58
330 查看
我们总希望网络像本地一样的使用,输入什么就得到什么,但凡事总是事与愿违的多。在网络的世界里,我们要学的第一课就是编码。统一字符编码,是我们的理想,但首先要知道编码不统一的原因。十分遗憾的是,编码问题大部分是由于所使用的传输媒介和解析技术引起的,这正与我们理念中的与平台无关与浏览器技术无关的初衷相违背,我们甚至需要知道传输的一些细节才能得知编码的由来。
1.从页面传递到后台的参数
页面传参主要是指get方式的提交,post方式将会按照content="text/html; charset=GBK"指定的gbk来解析,也就是说不会产生乱码。
而get方式时参数会使用默认编码来提交,默认编码为iso-8859-1,也就是说后台需要以iso-8859-1格式来解析:
new String(request.getParameter("a").getByte("iso-8859-1"),"gbk");
解决方案为:
页面段get的参数进行加密:encodeURI(encodeURI(a.value));
后台接收时参数进行解密:UrlEncode.decode(request.getParameter("a"),"utf-8");
浏览器的传输使用的是utf-8编码
2.从后台传递参数到页面
后台传递参数到页面,准确的说是ajax到页面,因为如果是response.forward()会产生整个页面重画,它会按照content="text/html; charset=GBK"指定的gbk来解析,也就是不会出现乱码的情况。
而ajax只能采用默认编码来解析。默认编码为utf-8
解决方案为:
我们直接在后台的response中指定content="text/html; charset=UTF-8",这样ajax所返回的xml中的中文就可以正确的读取出来
结论:
content="text/html; charset=gbk"所指定的编码是文档的编码,因为html本身就是文档,这样可以确保文档中的文字不会乱码,也就是以文字输出不会产生乱码文字。
而iso-8859-1是浏览器对于get方式的url解析为参数时所使用的编码,庆幸的是基本上所有的浏览器都是使用这个编码。实际上浏览器的内部操作都是使用这个编码来运行的,包括运行js。它统一出这个编码是因为iso-8859-1是基本编码,所有的操作系统都支持,这是浏览器与平台无关的设计(本地语言环境字符编码有可能不能解析文档中指定的编码的部分文字)。因为我们不想与浏览器的编码机制有联系,所以我们会采用加密解密的方式去解决编码问题。
至于ajax的utf-8编码,我想不需要再做太多解释了。第一,ajax的技术采用的就是utf-8编码;第二,ajax返回的是一个xmlDOM模型,response中指定content="text/html; charset=UTF-8"则是表示文档的文字为utf-8的编码
另外浏览器的传输编码为utf-8
1.从页面传递到后台的参数
页面传参主要是指get方式的提交,post方式将会按照content="text/html; charset=GBK"指定的gbk来解析,也就是说不会产生乱码。
而get方式时参数会使用默认编码来提交,默认编码为iso-8859-1,也就是说后台需要以iso-8859-1格式来解析:
new String(request.getParameter("a").getByte("iso-8859-1"),"gbk");
解决方案为:
页面段get的参数进行加密:encodeURI(encodeURI(a.value));
后台接收时参数进行解密:UrlEncode.decode(request.getParameter("a"),"utf-8");
浏览器的传输使用的是utf-8编码
2.从后台传递参数到页面
后台传递参数到页面,准确的说是ajax到页面,因为如果是response.forward()会产生整个页面重画,它会按照content="text/html; charset=GBK"指定的gbk来解析,也就是不会出现乱码的情况。
而ajax只能采用默认编码来解析。默认编码为utf-8
解决方案为:
我们直接在后台的response中指定content="text/html; charset=UTF-8",这样ajax所返回的xml中的中文就可以正确的读取出来
结论:
content="text/html; charset=gbk"所指定的编码是文档的编码,因为html本身就是文档,这样可以确保文档中的文字不会乱码,也就是以文字输出不会产生乱码文字。
而iso-8859-1是浏览器对于get方式的url解析为参数时所使用的编码,庆幸的是基本上所有的浏览器都是使用这个编码。实际上浏览器的内部操作都是使用这个编码来运行的,包括运行js。它统一出这个编码是因为iso-8859-1是基本编码,所有的操作系统都支持,这是浏览器与平台无关的设计(本地语言环境字符编码有可能不能解析文档中指定的编码的部分文字)。因为我们不想与浏览器的编码机制有联系,所以我们会采用加密解密的方式去解决编码问题。
至于ajax的utf-8编码,我想不需要再做太多解释了。第一,ajax的技术采用的就是utf-8编码;第二,ajax返回的是一个xmlDOM模型,response中指定content="text/html; charset=UTF-8"则是表示文档的文字为utf-8的编码
另外浏览器的传输编码为utf-8
相关文章推荐
- web前端页面与后台交互时发生中文参数传递出现乱码问题
- JAVASCRIPT AND C#.NET2.0 之间的传参问题(静态页面,动态页面,传参数,编码,乱码)
- web项目 出现404页面(问题不唯一)
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
- 解决IDEA打开web项目时不能随时刷新HTML或者JSP页面问题
- Web项目常见编码问题总结
- web 项目中a标签传值(中文)跳转页面的乱码问题
- 解决Web项目因访问URL与Tomcat服务器文件夹相同导致404页面的问题
- 引用外部.css或.js文件的路径问题--jsp或html页面或是在web项目中的引用
- j2ee的web项目怎么防止,重复提交的问题?(即点击了提交,后台新增了两条数据,也就是说,其实是点了多次提交,发起了多次http url,这样就插入了多条相同数据,但是主键id是不同的)
- 页面编码,传参使用中文时的问题
- 解决:tomcat6 多个web项目页面出现 多次重定向错误无法访问的问题
- Web项目在tomcat运行正常,移至weblogic后页面报错的问题
- 项目开发过程中解决页面编码问题
- 前台页面使用utf-8编码,url中包含中文参数时后台获取参数乱码问题解决
- [WEB前端开发]-VM中的POST请求-解决页面向control层传参的问题
- linux机上web项目添加font,nginx显示404问题(woff)及svn编码问题
- spring框架使用Filter配置解决页面与后台之间编码问题
- struts2项目web.xml里加filter后,jsp页面不显示问题