1. 什么是URL编码。
URL编码是一种浏览器用来打包表单输入的格式,浏览器从表单中获取所有的name和其对应的value,将他们以name/value编码方式作为URL的一部分或者分离的发送到服务器上。
2. URL编码规则。
每对name/value由&分开,每对来自表单的name/value用=分开。如果用户没有输入值的那个name依旧会出现不过就是没有值。
URL编码是在字符ASCII码的十六进制数的前面加上%。例如(她的十六进制数表示为5c)的URL编码就是%5c。
3. 简单介绍乱码和http请求
其实做web开发乱码问题是经常出现的,有了上面编码的基础之后下面来看看乱码。
1) 乱码问题是web开发过程中经常遇到的问题,主要原因就是URL中使用了非ASCII码造成服务器后台程序解析出现乱码的问题。
2) URL中最容易出现中文的地方就是在QueryString的参数值还有Servletpath中。
3) 简单用一个图来说明一下http请求的流程:
第一步:浏览器把URL经过编码送给服务器;
第二步:服务器把这些请求解码处理完毕之后将显示的内容进行编码发送给客户端浏览器;
第三步:浏览器按照指定的编码显示网页
4) 详细剖析GET提交如何编码以及服务器如何解码以及乱码解决方案
对于GET方式,我们知道它的提交是将请求数据附加到URL后面作为参数,这样依赖乱码就会很容易出现,因为数据name和value很有可能就是传递的为非ASCII码。
当URL拼接后,浏览器对其进行encode,然后发送到服务器。具体规则见URL编码规则。
这里详细说一下encode的过程中容易出现的问题,在这个过程中我们要明白需要URL encode的字符一般都是非ASCII码字符,所以我们就能知道出现乱码主要是URL中附加了中文或特殊字符做成的,另一个要知道URL encode到底是以什么样的编码方式对字符进行编码的,其实这个编码方式是由浏览器决定的,不同的浏览器和同一浏览器的不同设置影响了URL的编码,所以为了避免我们不需要的编码,我们可以通过java代码或javaspcript代码统一进行控制。
完成了URL encode之后URL就成了ASCII范围内的字符了,然后就以iso-8859-1的编码方式转换为二进制随着请求头一起发送出去。
到了服务器之后,首先服务器会先用iso-8859-1进行解码,服务器获取的数据都是ASCII范围内的请求头字符,其中请求URL里面带有参数数据,如果是中卫或特殊字符,那么encode后的%XY(编码规则中的十六进制数)通过request.setCharacterEncoding()是不管用的。这时候我们就能发现出现乱码的根本原因就是客户端一般是通过用UTF-8或GBK等对数据进行encode的,到了服务器却用iso-8859-1方式decoder显然不行。
这里的解决方式有两种,
一种:是通过String类的getBytes方法进行编码转换,具体java代码是:
new String(request.getParameter(“name”).getBytes(“iso-8859-1”),“客户端编码方式”)
第二种:在服务器xml代码中改配置信息:
<Connector port="8080"protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000"
redirectPort="8443"URIEncoding="客户端编码"/>
5) 详细剖析POST提交如何编码以及服务器如何解码以及乱码解决方案
对于POST方式,表单中的参数值对是通过request包发送给服务器,此时浏览器会根据网页的ContentType("text/html; charset=GBK")中指定的编码进行对表单中的数据进行编码,然后发给服务器。
在服务器端的程序中我们可以通过
Request.setCharacterEncoding()设置编码,然后通过
引用
This method must be called prior to reading request parameters or reading input using getReader()。
request.getParameter获得正确的数据。
这里出现乱码可以通过Request.setCharacterEncoding()直接解决。
从网站上再去的
- 大小: 10.2 KB
- 大小: 48 KB
分享到:
相关推荐
`struts2乱码处理.doc`文件很可能包含更具体的Struts2框架下的乱码解决方案,建议查看文档以获取更多细节。 总之,解决J2EE应用中GET和POST方式的乱码问题需要从服务器配置、页面编码以及代码处理三个方面入手,...
### POST和GET方法乱码解决方案 #### 前言 在Web开发中,中文乱码问题经常出现。这种现象主要是由于客户端(浏览器)与服务器之间的编码格式不一致导致的。通常情况下,浏览器发送数据时使用预设的编码格式,如UTF-...
- GET请求的参数通常会被附加到URL后面,浏览器会按照URL编码规则(默认是UTF-8)对参数进行编码,但服务器端默认可能使用的是ISO-8859-1。 - 解决方案:在服务器端(如JSP或Servlet)设置请求的字符编码为UTF-8,...
**Ajax 乱码解决方案** Ajax 乱码问题在开发Web应用程序时经常遇到,尤其是在涉及到不同编码格式时。本文将深入探讨Ajax与字符编码相关的技术细节,并提供几种有效的解决策略。 首先,JavaScript处理字符的方式是...
### jsp乱码解决方案 #### 一、引言 在Web开发中,特别是使用Java Server Pages (JSP)进行开发时,字符编码问题是一个经常遇到的技术难题。如果处理不当,很容易导致网页显示乱码,影响用户体验及数据的正确性。...
对于POST提交的中文乱码问题,解决方案通常涉及到前端的编码和后端的解码: 1. **前端编码**: - 在JavaScript中,使用`encodeURI`或`encodeURIComponent`函数将包含中文的字符串进行编码。需要注意的是,对于POST...
本文将详细介绍如何解决这个问题,包括使用 GETURL 和 POSTURL 方式的尝试,以及最终的解决方案。 问题描述 在使用 PB 提交 WEB 请求时,发现中文参数会出现乱码问题,导致服务器无法正确处理请求。这个问题看似...
总结来说,这个"get与post乱码过滤器.zip"中的Java源代码提供了对HTTP请求和响应进行统一编码管理的解决方案,尤其适用于处理多语言环境下的Web应用,防止由于编码不一致引发的问题。理解并应用这类过滤器对于优化...
- `GET`方式提交的数据会直接显示在URL中,而`POST`方式则不会。因此,在`GET`方式下,`request.setCharacterEncoding()`方法不起作用。 #### 三、解决方案 1. **在HTML中指定编码格式**: 在HTML头部添加`...
中文乱码解决方案 本文将详细介绍中文乱码问题的解决方案,并对IE6的“以UTF-8发送URL”选项设置对请求页面字符编码的影响进行分析。同时,本文也将讨论Tomcat容器的URI编码设置、浏览器的字符编码设置、过滤器的...
#### 三、表单提交乱码解决方案 ##### 3.1 表单提交乱码原因 当用户通过表单提交中文时,如果表单的编码与服务器端处理请求的编码不一致,则会导致中文乱码。 例如,在`submit.jsp`中,有一个简单的表单用于提交...
### Java Web 开发中的中文乱码问题及其解决方案 在Java Web开发过程中,中文乱码问题是一种常见的技术难题,尤其在处理客户端与服务器间的数据交互时更为突出。本文将详细介绍Java Web开发中出现乱码的原因,并...
综上所述,虽然`setCharacterEncoding`方法对POST请求的处理很有效,但解决GET请求乱码问题需要采取更全面的策略,包括但不限于服务器配置、URL编码、页面编码设置等。开发者应理解HTTP协议的工作原理,并充分考虑...
本文主要探讨了中文乱码的解决方案,特别是在使用Tomcat6.0作为servlet容器,与Firefox3.0和IE6浏览器交互时的情况。 首先,要理解中文乱码的产生,涉及到字符编码的转换和解码过程。通常,字符编码分为两种:页面...
本文将深入探讨这个问题,并提供解决方案。 一、问题解析 1. GET请求原理:GET请求的参数通常会附加在URL后面,形如`http://example.com?param1=value1¶m2=value2`。浏览器在构建这个URL时,会按照默认的字符...
本文将深入探讨JSP编程过程中出现的乱码问题,包括原因分析和解决方案。 1. **基本的乱码问题** 当JSP页面显示乱码时,通常是因为页面编码不一致导致的。页面的编码设置应保持一致,确保从文件存储、内容解码到...
一种可行的解决方案是在Tomcat服务器的配置文件`server.xml`中,修改`<Connector>`标签,添加`URIEncoding="UTF-8"`属性。这将强制服务器解析URL时使用UTF-8编码,从而解决GET请求的中文乱码问题。 4. **Tomcat配置...
以下是一些关于Java乱码解决方案的关键知识点: 1. **字符编码基础**:首先要理解的是字符编码,如ASCII、GBK、UTF-8等。ASCII只支持英文字符,GBK是中国常用的扩展GBK编码,而UTF-8是通用的多字节编码,能支持全...