打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
URLEncoder.encode 和 URLDecoder.decode 处理url的特殊参数
Percent-encoding
百分比编码 是一种拥有8位字符编码的编码机制,这些编码在URL的上下文中具有特定的含义。它有时被称为URL编码。编码由英文字母替换组成:“%” 后跟替换字符的ASCII的十六进制表示。
需要编码的特殊字符有: ':','/','?','#','[',']','@','!','$','&',"'",'(',')','*','+',',',';','=',以及,'%' 本身. 其他的字符虽然可以进行编码但是不需要。
':''/''?''#''['']''@''!''$''&'"'"'('')''*''+'','';''=''%'' '
%3A%2F%3F%23%5B%5D%40%21%24%26%27%28%29%2A%2B%2C%3B%3D%25%20 或 +
根据上下文, 空白符 ' ' 将会转换为 '+' (必须在HTTP的POST方法中使定义 application/x-www-form-urlencoded  传输方式), 或者将会转换为 '%20' 的 URL。
重定向的时候,因为需求,有时候会在url直接拼接参数,需要将参数值encode,处理特殊字符、中文字
form表单提交,无论get还是post,会自动encode
google浏览器地址栏输入中文,会自动encode,显示的是中文,但复制下来是16进制字节
后端代码不需要decode,tomcat会自动decode。
URLEncoder为web而发明。主要用于地址参数。
输出为原型的有:字母,数字,下划线 _,减号 -,乘号 *,点 .
输出为16进制的有:其他符号,中文字 等
在使用 url 的 queryString 传递参数时,因为参数的值,被DES加密了,而加密得到的是 Base64的编码字符串,类似于:
za4T8MHB/6mhmYgXB7IntyyOUL7Cl++0jv5rFxAIFVji8GDrcf+k8g==
显然 这里面含有了 特殊字符: / + = 等等,如果直接通过url 来传递该参数:
url = "xxxxx?param=" + "za4T8MHB/6mhmYgXB7IntyyOUL7Cl++0jv5rFxAIFVji8GDrcf+k8g==";
那么在服务端获得 param 会变成类似于下面的值:
"za4T8MHB/6mhmYgXB7IntyyOUL7Cl  0jv5rFxAIFVji8GDrcf k8g=="
我们看到 三个 + 号消失了。
其原因就是:如果url参数值含有特殊字符时,需要使用 url 编码。
url = "xxxxx?param=" + URLEncoder.encode("xxx", "utf-8");
然后服务端获取时:
String param = URLDecoder.decode(param, "utf-8");
这样才能获得正确的值:"za4T8MHB/6mhmYgXB7IntyyOUL7Cl++0jv5rFxAIFVji8GDrcf+k8g=="
其实 js 中也有类似功能的函数:
参见:js中的三个编码函数:escape,encodeURI,encodeURIComponent
注意事项:
URLEncoder should be the way to go. You only need to keep in mind to encode only the individual query string parameter name and/or value, not the entire URL, for sure not the query string parameter separator character & nor the parameter name-value separator character =
String q = "random word 拢500 bank $";String url = "http://example.com/query?q=" + URLEncoder.encode(q, "UTF-8");
URLEncoder 必须 仅仅 编码 参数 或者参数的值,不能编码整个 url,也不能一起对 param=value 进行编码。而是应该: param=URLEncode(value, "utf-8")
或者 URLEncode(param, "utf-8")=URLEncode(value, "utf-8")
因为 url 中的 & 和 = 他们是作为参数之间 以及 参数和值之间的分隔符的。如果一起编码了,就无法区分他们了。
进一步参考文档:
https://www.talisman.org/~erlkonig/misc/lunatech%5Ewhat-every-webdev-must-know-about-url-encoding/
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C#编程总结(十)字符转码
【精】ASP.NET页面通过URL传递参数(一)(转载)
java.net.URLEncode编码与URLDecode解码问题-明明的日志...
Unix中文宝库 论坛 - 一些工作经验 - 用java把google和baidu的URL编码还原成明文字串ZT - DouZhe.com
基于C#的词典接口调用代码实例
php urlencode()及urldecode函数详解(转摘)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服