1. 程式人生 > >URL傳參中特殊的字元處理

URL傳參中特殊的字元處理

一、問題:

       在做專案中,如果要傳遞的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();
	}
}

前端也有類似的功能。