Percent-encoding百分比编码 是一种拥有8位字符编码的编码机制,这些编码在URL的上下文中具有特定的含义。它有时被称为URL编码。编码由英文字母替换组成:“%” 后跟替换字符的ASCII的十六进制表示。 需要编码的特殊字符有:
根据上下文, 空白符 重定向的时候,因为需求,有时候会在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 注意事项:
String q = "random word 拢500 bank $"; String url = "http:///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./~erlkonig/misc/lunatech%5Ewhat-every-webdev-must-know-about-url-encoding/ |
|