一般情况你看到的应该不算是"加密" 而是"URL编码" (大多数情况)。
"URL编码"通常是为了处理参数里有不可用字符的问题。
比如
-
下载时
http://localhost/download?filename=新建文档+备份 副本.doc
这样的连接必然会有问题,中文会乱码,加号会被当作连接符,而空格会被服务器当作结束,剩下的内容就被丢弃了。 -
所以你后台接到的请求实际上会是这样
http://localhost/download?filename=??????
-
即便你后台强制转码
new String(filename.getBytes("iso-8859-1"),"UTF-8")
那也只会是http://localhost/download?filename=新建文档备份
为了解决这样的问题所以就会用到URL编码,他的作用其实和html的实体字符一个意思,就是为了不让浏览器/服务器自作多情的进行解析。
而且后台的服务器一般都可以自动处理URL编码,将他们还原回原来的字符串,所以你获取参数时一般不需要你手动解码,直接可以获取到解码后的原字符串。
在java里可以用java.net.URLEncoder.encode(str,charset)实现;
-
例如刚刚那个用java可以这样写
response.sendredirect("http://localhost/download?filename=" + URLEncoder.encode("新建文档+备份 副本.doc","UTF-8"));
-
最终显示就会是这个样子
http://localhost/download?filename=%e6%96%b0%e5%bb%ba%e6%96%87%e6%a1%a3%2b%e5%a4%87%e4%bb%bd+%e5%89%af%e6%9c%ac.doc