最近做的项目是要与其他系统进行对接,在返回URL的时候,由于没有考虑对方系统所传参数是否带含有中文,就直接用URL带参数返回了。
后知后觉,用主流 浏览器是不会暴露改问题的,IE则不支持URL带中文参数(www.xxx?param=中文)至于为什么不支持,在这边博文中有提到关于URL编码
下面是主要用得的代码
private String format(String format, Object... args){
if(args!=null && args.length>0){
int len = args.length;
for(int i=0;i<len;i++){
if(args[i]!=null && isContainChinese(String.valueOf(args[i]))){
try{
args[i] = URLEncoder.encode((String) args[i],"utf-8");
}catch (UnsupportedEncodingException e){
logger.error(e);
}
}
}
}
return String.format(format,args);
}
/**
* 判断是否有中文
* @param str
* @return
*/
private boolean isContainChinese(String str) {
private Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
Matcher m = p.matcher(str);
if (m.find()) {
return true;
}
return false;
}
如果是JS,则使用encodeURI()即可。