html form表单
提交
前言
参考
java中的url 编码与解码
URL中带加号的处理
application/x-www-form-urlencoded 字符串
一种编码类型。
当URL地址里包含非西欧字符的字符串时,系统会将这些字符转换成application/x-www-form-urlencoded字符串。
表单里提交时也是如此,当包含非西欧字符的字符串时,系统也会将这些字符转换成application/x-www-form-urlencoded字符串。
然而,在向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时这种编码方式效率很低。这个时候我们就要使用另一种编码类型“multipart/form-data”。
比如在我们在做上传的时候,表单的enctype属性一般会设置成“multipart/form-data”。Browser端<form>
表单的ENCTYPE属性值为multipart/form-data,它告诉我们传输的数据要用到多媒体传输协议,由于多媒体传输的都是大量的数据,所以规定上传文件必须是post方法,<input>
的type属性必须是file。
http get请求时、form 表单以“application/x-www-form-urlencoded”提交时,转换规则:
- 字符”a”-“z”,”A”-“Z”,”0”-“9”,”.”,”-“,”*”,和”_” 都不会被编码;
- 将空格转换为加号 (+) ;
- 将非文本内容转换成”%xy”的形式,xy是两位16进制的数值;
- 在每个 name=value 对之间放置 & 符号;
使用URL时注意:
web 设计者面临的众多难题之一便是怎样处理不同操作系统间的差异性。这些差异性能引起URL方面的问题:例如,一些操作系统允许文件名中含有空格符,有些又不允许。大多数操作系统不会认为文件名中含有符号“#”会有什么特殊含义;但是在一个URL中,符号“#”表示该文件名已经结束,后面会紧跟一个 fragment(部分)标识符。其他的特殊字符,非字母数字字符集,它们在URL或另一个操作系统上都有其特殊的含义,表述着相似的问题。为了解决这些问题,我们在URL中使用的字符就必须是一个ASCII字符集的固定字集中的元素,具体如下:
1.大写字母A-Z
2.小写字母a-z
3.数字 0-9
4.标点符` - _ . ! ~ * ' (和 ,)
所有其他字符都是不安全的,因此首先使用一些编码机制将它们转换为一个或多个字节。然后每个字节用一个包含 3 个字符的字符串 “%xy” 表示,其中 xy 为该字节的两位十六进制表示形式。推荐的编码机制是 UTF-8。但是,出于兼容性考虑,如果未指定一种编码,则使用相应平台的默认编码。
其中空格是一个特殊情况,因为它除了被编码成“%20”以外,还能编码为一个“+”。加号(+)本身被编码为%2B。当/ # = & 和?作为名字的一部分来使用时,而不是作为URL部分之间的分隔符来使用时,它们都应该被编码。
Java 处理 application/x-www-form-urlencoded
// 将普通字符串转换成application/x-www-form-urlencoded字符串
java.net.URLEncoder.decode(String s, String enc);
// 将application/x-www-form-urlencoded字符串转换成普通字符串。
java.net.URLDecoder.decode(String s, String enc);
还没有评论,来说两句吧...