不管是以何种方式传递url时,如果要传递的url中包含特殊字符,如想要传递一个+,但是这个+会被url会被编码成空格,想要传递&,被url处理成分隔符。
尤其是当传递的url是经过Base64加密或者RSA加密后的,存在特殊字符时,这里的特殊字符一旦被url处理,就不是原先你加密的结果了。
url特殊符号及对应的编码
| 符号 | url中的含义 | 编码 |
|---|---|---|
| + | URL 中+号表示空格 | %2B |
| 空格 | URL中的空格可以用+号或者编码 | %20 |
| / | 分隔目录和子目录 | %2F |
| ? | 分隔实际的URL和参数 | %3F |
| % | 指定特殊字符 | %25 |
| # | 表示书签 | %23 |
| & | URL中指定的参数间的分隔符 | %26 |
| = | URL中指定参数的值 | %3D |
URLEncode和URLDecode
接受参数案例
/ * Http 协议特殊字符处理 * 1.什么是特殊字符处理(rpc远程通讯 实现加密 + ?)正好和 http 特殊字符相同,导致会转成空格 * @author xiaoming * @Date 2019/10/11 */ @RestController public class IndexController { / * http://localhost:8080/indexPage?userName=1+1 * 结果:1 1 * 传入加号会变成空格 * 如何解决:对URL转码 例如:用%2B代替+ * * @param userName * @return */ @RequestMapping("/indexPage") public String indexPage(String userName){ System.out.println(userName); return userName; } }
Java代码处理转码
URLEncoder.encode和decode
String encode = URLEncoder.encode("1+1", "UTF-8"); String decode = URLDecoder.decode(encode, "UTF-8"); System.out.println("encode:" + encode + ",decode:" + decode);
Http接口参数编码处理
String url = "http://127.0.0.1:8080/indexPage?"; // 参数转码 String strParam = "name=" + URLEncoder.encode("1+1", "utf-8"); String newUrl = url + strParam; String result = HttpClientUtils.httpGet(newUrl); System.out.println("result:" + result);
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199555.html原文链接:https://javaforall.net
