URL传参中特殊的字符处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014172271/article/details/83066653

一、问题:

       在做项目中,如果要传递的url中包含特殊字符,例如"+",但是这个+会被url会被编码成空格。尤其是当传递的url是经过Base64加密或者RSA加密后的,存在特殊字符时,这里的特殊字符一旦被url处理,就不是原先你加密的结果了。一下例举了几个常见的转化:

(1)+ URL中+号表示空格 %2B 
(2)空格 URL中的空格可以用+号或者编码 %20 
(3)/ 分隔目录和子目录 %2F 
(4)? 分隔实际的 URL 和参数 %3F 
(5)% 指定特殊字符 %25 
(6)# 表示书签 %23 
(7)& URL 中指定的参数间的分隔符 %26 
(8)= URL 中指定参数的值 %3D

二、解决方法:

后端使用URLEncoder.encode

@RestController
@Slf4j
public class UserController {
	
	@RequestMapping("/index")
	public Map<String, Object> get(String username){
		Map<String, Object> map = new HashMap<>();
		log.info("username:{}", username);
		map.put("username", username);
		return map;
	}
	
	@RequestMapping("/username")
	public String get(){
		String url = "http://localhost:8080/index?username="+URLEncoder.encode("1+1");
		JSONObject result = HttpClientUtils.httpGet(url);
		log.info("result:{}", result);
		return result.toString();
	}
}

前端也有类似的功能。

猜你喜欢

转载自blog.csdn.net/u014172271/article/details/83066653