URL编码

URL编码

1.URL编码

我们知道URL指的的是网址,所谓的URL编码指的是对网址上的不安全的字符,例如中文,进行编码,编码后的中文方便在网络上传输。

例如,我们提交一个表单,表单内容如下所示:

用户名:

访问表单所在的页面,然后提交该表单,使用HttpWatch工具进行抓包,如图1-1所示:

图1-1抓取请求信息

图1-1中,请求信息中的Content-Type请求头的值为:“application/x-www-form-urlencoded”。该请求头指明了表单的类型,并对表单提交的参数进行了URL编码,图中提交的参数“李四”经过URL编码后变成“%E6%9D%8E%E5%9B%9B”。

如果表单提交的方式是get,请求参数虽然位置不同,但是也会进行URL编码。但是如果是在超链接或直接在地址栏上输入请求参数就不会进行URL编码,这样在进行网络传输过程中,就有可能出现字节丢失。下图是get请求和表单请求的参数是否编码的区别,如图1-2所示:

图1-2url编码

当使用表单提交参数时,参数已经进行了url编码,服务器接收到请求参数后,会自动识别URL编码,并且会自动对请求参数进行URL解码操作。

2.URL编码规则

需要注意的是:URL编码并不是字符编码,它是客户端与服务器传递参数的一种方式。并且URL编码是在字符编码的基础上进行的。例如:表单提交的参数“李四”,会先使用utf-8进行编码得到一个字节

数组,然后再对该字节数组进行URL编码。下面通过一张图来理解URL编码的过程,如图1-2所示:

图1-2url编码过程

了解了URL编码的过程,现在来分析URL编码的规则,如下:

(1)一个中文字符:“李四”,先将其进行字符编码,如utf-8编码,得到如下所示字节数组:

[-26,-99,-114,-27,-101,-101]

我们知道使用utf-8编码,一个汉字对应三个字节。

(2)对得到的utf-8编码进行运算,将以上六个数字分别加上256,得到如下六个数字:

230,157,142,229,155,155

(3)将以上得到的六个数字分别转换成十六进制,如下:

E6,9D,8E,E5,9B,9B

(4)然后将这六个十六进制数前面都添加“%”,就得到了李四的URL编码,如下:

%E6%9D%8E%E5%9B%9B

3.URL编码练习

通过以上对URL编码的学习,下面我们通过一个案例来学习如何使用Java代码实现URL编码,具体如下:

(1)创建web应用,Example13,在该应用下新建一个Class类,Demo1,主要代码如例1-1所示:

例1-1Demo1.java

public class Demo1{

public static void main(String[]args)throws UnsupportedEncodingException {

String name="张三";

String_name=URLEncoder.encode(name,"utf-8");

System.out.println(_name);

}

}

例1-1中,使用URLEncoder类的encode(String s,String enc)方法对字符串“张三”进行URL编码,该方法的第一个参数是将要编码的字符串,第二参数是指定字符编码的名称。

(2)运行Demo1的主函数,运行结果如图1-3所示:

图1-3运行结果

(3)对Demo1的主函数做如下修改,如例1-2所示:

public class Demo1{

public static void main(String[]args)throws UnsupportedEncodingException

{

String name="张三";

String_name=URLEncoder.encode(name,"utf-8");

System.out.println(_name);

String value=URLDecoder.decode(_name,"utf-8");

System.out.println(value);

}

}

使用URLDecoder类的decode(String s,String enc)方法是进行URL解码,第一个参数代表的是URL编码后的字符,第二个参数是字符编码的名称。

(4)运行主函数,运行结果如图1-4所示:

图1-4运行结果

我们在html文件中,如果超链接中带有中文参数,我们无法对其进行URL编码,因为HTML中不能写Java代码。我们学习了jsp后就可以将超链接中的中文参数进行URL编码,在jsp文件中是可以写Java 代码的。

相关主题
相关文档
最新文档