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()设置编码,然后通过

request.getParameter获得正确的数据。

这里出现乱码可以通过Request.setCharacterEncoding()直接解决。

URL编码以及GET和POST提交乱码解决方案 (转)的更多相关文章

  1. URL编码以及GET和POST提交乱码解决方案

    get方式时参数是作为url一部分传输的.而对于url是有规范的,汉字超出了规范的范围. post方式不需要加编码是错误的.post时也必须传送符合服务器规范的编码.如果错误,服务器收到的内容也不会正 ...

  2. 详解JavaScript中的Url编码/解码,表单提交中网址编码

    本文主要针对URI编解码的相关问题做了介绍,对Url编码中哪些字符需要编码.为什么需要编码做了详细的说明,并对比分析了Javascript 中和 编解码相关的几对函数escape / unescape ...

  3. URL参数带中文,后台接收乱码解决方案

    1.前台中文参数用encodeURIComponent()进行编码,如: var textName= encodeURIComponent(name); 2.对整个URL用encodeURI()进行编 ...

  4. 关于 URL 编码及 JavaScript 编码函数【转载+整理】

    原文地址:http://www.ruanyifeng.com/blog/2010/02/url_encoding.html 本文内容 引入 环境 测试 JavaScript 编码函数   引入 URL ...

  5. javaweb请求编码 url编码 响应编码 乱码问题 post编码 get请求编码 中文乱码问题 GET POST参数乱码问题 url乱码问题 get post请求乱码 字符编码

     乱码是一个经常出现的问题 请求中,参数传递的过程中也是经常出现乱码的问题 本文主要整理了请求乱码中的问题以及解决思路   先要理解一个概念前提: 编码就是把图形变成数值码所以说: 图形的字符  -- ...

  6. URL编码分析与乱码解决方案

    一.问题的由来 URL就是网址,只要上网,就一定会用到. 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号.比如,世界上有英文字母的网址"http://ww ...

  7. cookie的中文乱码问题【URL编码解码】

    先搞明白为什么会乱码,为什么要转码: 在tomcat 8 之前,cookie中不能直接存储中文数据.需要将中文数据转码,一般采用URL编码(%E3).在tomcat 8 之后,cookie支持中文数据 ...

  8. gb2312提交的url编码转换成utf8的查询

    使用场景,当一网站是gb2312的编码向另一个是utf8的网站提交查询 如:http://search.chinayq.com/?key=%C0%D6%C6%F7 其中key为gb2312的url编码 ...

  9. 浏览器自动转换URL编码产生乱码问题

    如果网址中含有汉字,浏览器会自动将其转换成URL编码,而在接收端,它又自动转换回来. 大部分时候都没什么问题,但有时候就很讨厌.因为生成这种URL编码,编码时的字符集和解码字符集不一定相同,比如编码时 ...

随机推荐

  1. freeRTOS学习8-21

    不能再中断服务程序调用该函数 应该调用xQueueSendFromISR()

  2. NLP 对抗方法整理

    NLP中对抗应用 1. 分词 , 可以用GAN来做,消除不同分词器的差异性 2. 风格迁移, 这个在图像中应用较多,在NLP中同样可行 3. 提高问答系统/阅读理解的性能. 4. 机器翻译应该也可以做 ...

  3. RFID/13.56MHZ/NFC线圈防干扰原理-附磁导材料防干扰原理 20191128

    RFID/13.56MHZ/NFC之间采用电磁感应方式进行通信. 1.铁氧体.硅钢片等导磁材料的相对磁导率比较高,多年前在变压器中已经有广泛的应用.有防止磁通饱和,提高变压器感应效率的作用. 2.RF ...

  4. [转帖]瀚高数据库创建uuid的方法

    使用syssso登录,并执行下列语句 highgo=> select set_secure_level('off'); set_secure_level -------------------- ...

  5. PostgreSQL之 使用扩展Extension

    目前开发中用到的都是PostgreSQL的一些基本的功能,无意间查到PostgreSQL还支持Extension,不仅源码包中自带有Extension,还有一些其他非官方的Extension.现在不用 ...

  6. [转帖]查看Linux用的桌面是GNOME、KDE或者其他

    http://superuser.com/questions/96151/how-do-i-check-whether-i-am-using-kde-or-gnome KDE 基于QT做的 已经越来越 ...

  7. 数据检索grep

    linux操作中,总是会输出很多的内容.但是有些内容并不是我们重点关注的,所以为了看起来方便,也为了提升效率,就将不需要的内容过滤掉.  只输出想要的东西. grep: 用于搜索 模式参数(给定的字符 ...

  8. sqlserver中分页的方式

    1.使用top进行: 1.select top 页大小 * from 表名where id not in(select top 页大小*(查询第几页-1) id from 表名 order by id ...

  9. 虚拟机ubuntu连不上网

    虚拟机ubuntu连不上网 解决地址:https://blog.csdn.net/spy_h/article/details/80933458

  10. C#发送Outlook邮件(仅SMTP版本)

    先表明Outlook的参数:网址:https://support.office.com/zh-cn/article/Outlook-com-%E7%9A%84-POP%E3%80%81IMAP-%E5 ...