URL中引數值帶有中文的解決方案
阿新 • • 發佈:2019-01-26
在專案中,總是難以避免url中帶中文的情況.
後臺生成的Url中帶有中文:
則中文值應該用URLEncoder.encode進行編碼
serviceName = URLEncoder.encode(serviceName,"utf-8");
private String makeReturnUrl(String pString, String Dstring, String yString, String serviceName, String serviceId) throws ItrusException{
long time = System.currentTimeMillis();
String text = pString + Dstring + yString + time ;
String hmacByOurs = MD5.sign(text, appSecretOurls, "utf-8");
if (StringUtils.isNotBlank(serviceName)) {
try {
serviceName = URLEncoder.encode(serviceName,"utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (StringUtils.isNotBlank(serviceId)) {
try {
serviceId = URLEncoder.encode(serviceId,"utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
String url = "?pes=" + pString +
"&des=" + Dstring +
"&yfs=" + yString +
"×tamp=" + time +
"&sec=" + hmacByOurs +
"&sen=" + serviceName +
"&sei=" + serviceId;
return url;
}
生成的連結
http://127.0.0.1:8080/xxxx/from?pes=157&des=158&yfs=161×tamp=1527579010896&sec=f4e9ce5f1ecf86941db3495089a3f8fa&sen=%E6%B5%8B%E8%AF%95%E4%B8%9A%E5%8A%A1%E5%90%8D%E7%A7%B0&sei=%E6%B5%8B%E8%AF%95%E4%B8%9A%E5%8A%A1%E7%BC%96%E5%8F%B7001
在tomcat中設定uri的編碼方式
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8" />