只有 0-9[a-Z] $ - _ . + ! * ' ( )
, 以及某些保留字
,才能不经过编码直接用于 URL
java对url编码/解码
编码 |
解码 |
说明 |
URLEncoder.encode(原始url, 字符集) |
URLDecoder.decode(已编码的url, 字符集) |
|
public static void main(String[] args) throws UnsupportedEncodingException {
//编码前
String decodeStr = "http://www.baidu.com?param=测试";
//编码后
String encodeStr = "http%3A%2F%2Fwww.baidu.com%3Fparam%3D%E6%B5%8B%E8%AF%95";
//java 编码
String encode = URLEncoder.encode(decodeStr, "utf-8");
System.out.println(encode);//结果:http%3A%2F%2Fwww.baidu.com%3Fparam%3D%E6%B5%8B%E8%AF%95
System.out.println(encode.equals(encodeStr));//结果:true
System.out.println("-------------");
//java解码
String decode = URLDecoder.decode(encodeStr, "utf-8");
System.out.println(decode);//结果:http://www.baidu.com?param=测试
System.out.println(decode.equals(decodeStr));//结果:true
}
js对url编码/解码
编码 |
解码 |
说明 |
escape(原始url) |
unescape(已编码的url) |
函数出现时间:javascript 1.0 |
encodeURI(原始url) |
decodeURI(已编码的url) |
函数出现时间:javascript 1.5 |
encodeURIComponent(原始url) |
decodeURIComponent(已编码的url) |
函数出现时间:javascript 1.5 |
- 采用ISO Latin字符集对指定的字符串进行编码
- 对除ASCII字母、数字、标点符号 @ * _ + - . / 以外的其他字符进行编码
- 解码使用
unescape
- 把URI字符串采用UTF-8编码格式转化成escape格式的字符串
- 返回编码为有效的统一资源标识符 (URI) 的字符串,不会被编码的字符:! @ # $ & * ( ) = : / ; ? + '
- 解码使用
decodeURI
- 把URI字符串采用URF-8编码格式转化成escape格式的字符串,与encodeURI相比,这个函数会将更多的字符进行编码,比如"/"等字符
- 对URL的组成部分进行个别编码,而不用于对整个URL进行编码,不会被此方法编码的字符:! * ( )
- 解码使用
decodeURIComponent
//原始url
var oriUrl = "http://www.baidu.com?param=测试";
//js三种方式编码
var escapeUrl = escape(oriUrl);
var encodeUrl = encodeURI(oriUrl);
var encodeComponentUrl = encodeURIComponent(oriUrl);
//输出结果
console.log(escapeUrl);//结果:http%3A//www.baidu.com%3Fparam%3D%u6D4B%u8BD5
console.log(encodeUrl);//结果:http://www.baidu.com?param=%E6%B5%8B%E8%AF%95
console.log(encodeComponentUrl);//结果:http%3A%2F%2Fwww.baidu.com%3Fparam%3D%E6%B5%8B%E8%AF%95
console.log("-------");
//对应的三种方式解码
console.log(unescape(escapeUrl));//结果:http://www.baidu.com?param=测试
console.log(decodeURI(encodeUrl));//结果:http://www.baidu.com?param=测试
console.log(decodeURIComponent(encodeComponentUrl));//结果:http://www.baidu.com?param=测试