URL编码以及get和post请求乱码问题

1.  什么是URL编码。html

URL编码是一种浏览器用来打包表单输入的格式,浏览器从表单中获取全部的name和其对应的value,将他们以name/value编码方式做为URL的一部分或者分离的发送到服务器上。java


2.  URL编码规则。web

每对name/value由&分开,每对来自表单的name/value用=分开。若是用户没有输入值的那个name依旧会出现不过就是没有值。浏览器

URL编码是在字符ASCII码的十六进制数的前面加上%。例如\(她的十六进制数表示为5c)的URL编码就是%5c。服务器


3.  简单介绍乱码和http请求编码

其实作web开发乱码问题是常常出现的,有了上面编码的基础以后下面来看看乱码。spa

1)  乱码问题是web开发过程当中常常遇到的问题,主要缘由就是URL中使用了非ASCII码形成服务器后台程序解析出现乱码的问题。code

2)  URL中最容易出现中文的地方就是在QueryString的参数值还有Servletpath中。xml

3)  简单用一个图来讲明一下http请求的流程:htm



第一步:浏览器把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()设置编码,而后经过

request.getParameter得到正确的数据。

这里出现乱码能够经过Request.setCharacterEncoding()直接解决。

相关文章
相关标签/搜索